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 „Gefällt mir“
Hallo,
alles klar, danke! Die Events werden leider wirklich in dem GUI-Thread ausgeführt.
MfG Markus