2009-02-27 9 views
5

fand ich diesen Code:Was ist die Verwendung von Invoke() in .net?

this.Invoke(new EventHandler(EventGetSum)); 

Ist das nicht das gleiche wie das Schreiben:

EventGetSum(); 

Was nützt das?

+0

Das ist ein ziemlich schlechter Titel, vielleicht sollten Sie darüber nachdenken, es in etwas beschreibender zu ändern – grapefrukt

+0

Überprüfen Sie diese Frage http://StackOverflow.com/Questions/571706/shortest-way-to-write-a-thread-safe-access -method-to-a-windows-forms-control/571749 # 571749 – alex2k8

Antwort

13

Wenn Sie schreiben EventGetSum(), dass sofort Aufrufe die EventGetSum-Methode.

Wenn Sie new EventHandler(EventGetSum) schreiben, wird ein Delegat erstellt, der EventGetSum aufruft, wenn er aufgerufen wird.

Der Aufruf an Control.Invoke ruft den angegebenen Delegaten aus dem UI-Thread auf, der für das Steuerelement verantwortlich ist. Dies ist notwendig, weil Sie nicht auf Benutzeroberflächenelemente aus beliebigen Threads zugreifen dürfen.

5

Es führt die EventGetSum Methode im Thread, zu dem das Fenster this gehört.

4

Dies wird normalerweise bei Cross-Thread-UI-Aufrufen verwendet.

Schauen Sie sich die MSDN-Dokumentation für ISynchronizeInvoke an.