Laden...

Invoke oder änliches Gesucht für Form bearbeitung

Erstellt von carmani vor 14 Jahren Letzter Beitrag vor 14 Jahren 817 Views
C
carmani Themenstarter:in
274 Beiträge seit 2008
vor 14 Jahren
Invoke oder änliches Gesucht für Form bearbeitung

Hallo Leute,

Ich rufe einen Thread auf. Am Ende dieses Threads löse ich ein Event aus, und dieses event ist mit einer Methode verknüpft welche mir eine Combobox befüllen soll. Jetzt weiss ich nicht so recht wo ich dort das invoke einbindne soll bzw ob es einen besseren weg gibt.

Danke im Voraus.

Lg Tom


 public static void load_table()
    {
        Thread database_transaction = new Thread(new ThreadStart(load_table_thread));
        
        database_transaction.Start();
    }

    //Tabelle von DB laden
    public static void load_table_thread()
    {
        err_str = DB_Handler.show_table(ref DS, tab_name, command);

        if (err_str == "")
            err_str = RM.GetString("msg_database_load");

        events.Start_Evetn_1();
   
    }


Und Start_Event_1 wird eien Methode aufgerufen welche die Combo füllt

Lg

R
234 Beiträge seit 2007
vor 14 Jahren

Im Event-Handler, z.B:

private void MyEvent(object sender, EventArgs e) {
	if(InvokeRequired) {
		Invoke(new EventHandler(MyEvent), sender, e);
		return;
	}

	// hier mit GUI-Elementen interagieren
}
G
497 Beiträge seit 2006
vor 14 Jahren

du musst das Event ja irgendwo abonnieren. Und in der Methode, in der du das Event bearbeitest, machst du auch den Invoke.

das ganze sieht dann normalerweise so aus:


private void Start_Event_1_Handler()
{
      if (InvokeRequired)
      {
            // Invoke, da wir nicht im UI-Thread sind
            Invoke(new Start_Event_1_Delegate(Start_Event_1_Handler));
      }
      else
      {
            // Combobox befüllen, wir sind im UI-Thread
      }
}

M
3 Beiträge seit 2009
vor 14 Jahren

Dafür ist der Backgroundworker prima geeignet

BackgroundWorker-Klasse

Im RunWorkerCompleted Event füllste dann Deine ComboBox

5.299 Beiträge seit 2008
vor 14 Jahren

Wenn du viel mit Threads zu tun hast, kannste auch die [ExtensionMethods] CrossThread-Calls verwenden, um das Event gleich im Gui-Thread zu raisen.

läuft dann auf sowas hinaus:

CrossThread.RunGui(OnMyXYEvent, MyXYEventArgs);

wo "ungethreaded" stünde:

OnMyXYEvent(MyXYEventArgs);

Sind auch Samples dabei

Der frühe Apfel fängt den Wurm.

49.485 Beiträge seit 2005
vor 14 Jahren

Hallo carmani,

alles was du wissen musst, steht in [FAQ] Controls von Thread aktualisieren lassen (Control.Invoke)

herbivore

C
carmani Themenstarter:in
274 Beiträge seit 2008
vor 14 Jahren

Danke an alle für die Hilfe habs jetzt mit herbivore seiner Lösung umgesetzt, diese ist mir am einfachsten erschienen!

Thanks Tom