Der Delegate ist quasi ein Zeiger auf eine Methode. Und den kann man halt einer anderen Methode übergeben. Der Invoke Befehle sagt dem GUI Objekt (in dem Fall eine Listbox): He ich will auf dich aus einem anderen Thread zugreifen.
In meiner Beispielanwendung hab ich den delegaten zuerst deklariert:
Code:
delegate void InvokeLB(string Data);
Und dann ein Objekt davon deklariert
Code:
InvokeLB lbRecievedDelegate;
Und dann in der Methode bCreateSP_Click eine neue Instanz erzeugt:
Code:
lbRecievedDelegate = new InvokeLB(InvokeLBRecieved);
Die auf diese Methode hier verweist
Code:
void InvokeLBRecieved(string Data) //Parameter stimmen mit der Deklaration des Delegaten überein
{
lbRecieved.Items.Add(Data);
}
Und in der Methode die Aufgerufen wird wenn neue Daten am SerialPort verfügbar sind rufe ich dann die Invoke Methode der Listbox lbRecieved auf und übergebe ihr den davor instanzierten Delegaten und die Parameter (in dem Fall die Daten die Empfangen wurden)
Code:
lbRecieved.Invoke(lbRecievedDelegate,new object[]{RecievedLine});
Lesezeichen