2016-04-19 28 views
0

Ich habe einen Hintergrund-Worker-Thread, der kontinuierlich die Daten aktualisiert, die in einem Fenster von einer Netzwerkquelle angezeigt werden. Ich habe auch einen Knopf, der ein Ereignis auslöst.In der Ausführung eines Programms sind Ereignisse wie Threads? WPF

Meine Frage ist, in welcher Phase (relativ zur Ausführung des Hintergrundarbeiters) wird die Ereignismethode ausgeführt? Ist es ähnlich wie Threads, dass sie gleichzeitig passieren? D.h., wird der Hintergrundarbeiter noch ausgeführt, während meine Knopfklick-Methode ausgeführt wird? In diesem Fall muss ich Sperren verwenden. Oder wird der Hintergrund-Worker pausieren, bis die Button-Klick-Methode beendet wurde?

+0

Das Ereignis _handler_ wird im selben Thread wie alle Trigger ausgeführt, es sei denn, es gibt einen benutzerdefinierten Code zum Auslösen des Handlers in einem _different_ -Thread. Wenn also der Hintergrund-Worker einen Click-Event-Handler aufruft, wird er angehalten, bis die Click-Event-Handler beendet sind. Wenn der Handler ausgeführt wird, weil auf eine Schaltfläche geklickt wurde, wird er im UI-Thread ausgeführt. –

Antwort

3

Ereignisse, die von UI-Steuerelementen (z. B. Schaltflächen) ausgelöst werden, werden im Hauptthread ausgeführt, u. A. Im UI-Thread. Ereignisse, die Sie selbst aufwerfen, werden auf welchem ​​Thema auch immer ausgelöst. Alle Event-Raisings blockieren die Ausführung ihres eigenen Threads, bis sie abgeschlossen sind. Sie sind nicht besonders, wenn man sie nennt: Nur ein wenig syntaktischer Zucker um eine willkürliche Liste von Delegierten aufzurufen.

In Abwesenheit von explicit synchronization Code, werden alle anderen Threads entlang des Hintergrunds fröhlich weiter ausgeführt werden.

Wenn Sie zwischen einem Ereignishandler im Benutzeroberflächenthread und einem Arbeitsthread kommunizieren müssen oder möchten, müssen Sie dazu expliziten Code schreiben. Nichts besonderes hier: nur zwei Threads.

Und wenn Sie sowohl einen Event-Handler als auch einen Thread haben, der ihre fettigen kleinen Handschuhe auf das gleiche Objekt legt, und wenn die Operationen auf diesem Objekt nicht atomar sind, haben Sie Recht: Sie müssen sperren. Thread-safe collections may come in handy.

Verwandte Themen