C# Multithreading - Alternative fuer Invoke?

ZeuX

Grünschnabel
Hallo!

Nach langem überlegen in welches Forum meine Frage gehört hab ich mich - wieder - für das Cafe entschieden. Hoffe es passt.

Ich habe ein Problem, Mutlithreading betreffend. Es geht um zwei Elemente, beide haben kein Invoke().

Mein Programm ruft in der Klasse "Dev" die Mailbox ab - asynchron zum Hauptthread.
Sollte der Fall eintreten dass er eine neue Nachricht gefunden hat wird ein Event ausgelöst, welches im Hauptthread aboniert wurde und führt folgenden Code (vereinfacht) aus:
Code:
NewMessagesMenue.Text = "Eine neue Nachricht";
NewCommetMenue.Text = "Ein neuer Kommentar";
Die erste Zeile macht ihm nichts aus, bei der zweiten jedoch meint er dass er den Text nicht ändern kann, da das Element von einem anderen Thread initialisiert wurde.
Ich würde ja die Funktion Invoke() verwenden, doch gibt es die für ein Menü nicht.
Eigentlich sollte ich in dem Fall auch ohne Invoke auskommen, die Aktion auf das Event wird doch vom Hauptthread ausgeführt, oder habe ich was falsch verstanden?

Ich hoffe ihr könnt/wollt mir helfen,
mfG Zeux
 
Controls dürfen nur von dem Thread angesprochen werden in dem sie erstellt wurden.
Und ein Event wird immer in dem Thread ausgeführt in dem es gefeuert wurde.

Weiterhin bezieht sich Control.Invoke immer auf den Thread in dem das Control erstellt wurde.
Daher kannst auch das Control nehmen, in welchem Du das Menu definiert hast...
 
Ich habe das jetzt so gelöst dass ich am Anfang überprüfe ob ein Invoke notwendig ist oder nciht, und wenn, dann eins mit this.Invoke() ausführen...
 
Zurück