Events in anderem Thread

Hallo liebe Experten,
ich habe eine KlassenBibliothek mit Events, die durch Invoke geworfen werden (Die Klassenbibliothek arbeitet in einem anderen Thread, welcher die Events wirft).
Wenn ich mir jetzt in der Hauptklasse eine Instanz dieser Klasse und einen Thread anlege und den Handler für das Event in dem Thread hinzufüge:

Dim EventThread as new Threading.Thread(Addressof EventThreadSub)

Private Sub EventThreadSub()
 AddHandler KlassemitEvents.Event1, Addressof KlassemitEvents\_Event1

while true
end while
End Sub

Private Sub KlassemitEvents\_Event1()
 'Event Code
End Sub

wird das Event der „KlassemitEvent“-Klasse, dann in dem Thread „EventThread“ aufgerufen oder in der Main?
Und falls die Events durch den Thread laufen, wie kann ich den Thread am Laufen erhalten ohne die Endlosschleife, die meine CPU auslastet?

Schonmal Danke im Vorraus!
Markus

Hi Markus,

die Eventhandler laufen in demselben Thread, der das Event ausgelöst hat.
Da du mit deiner Endlosschleife den Thread sowieso blockierst, kannst du ihn auch einfach schlafen legen: Thread.Sleep(Timeout.Infinite)
Sinnvoller wäre es natürlich, wenn du den Thread auch etwas machen lässt. Ansonsten brauchst du ihn ja nicht.

Nico

Danke für die schnelle Antwort!

Die Events werden durch das System.ComponentModel.ISynchronizeInvoke geworfen, bedeutet das nicht, dass es in dem Thread ausgeführt wird, der den Delegaten erstellt hat? Oder verstehe ich da etwas falsch?
Code für die Events: >>ClickMichMfG Markus

Hi,

ich kann mich diesbezüglich auch irren. Das einfachste ist aber auf jeden Fall, einfach mal den Debugger drüber laufen zu lassen und nachzusehen, in welchem Thread du bist.

Nico

Hallo,

wo im Debugger sehe ich denn, in welchem Thread ich mich befinde?

MfG Markus

Wenn der Debugger an einer Stelle anhält, kannst du über Debuggen -> Fenster -> Threads (Strg + Alt + H) die Liste der aktuellen Threads ansehen. Der aktuelle hat einen grünen Pfeil davor.

1 Like

Hallo,

alles klar, danke! Die Events werden leider wirklich in dem GUI-Thread ausgeführt.

MfG Markus