TL;DR Version: Ich habe zwei Threads. Einer von ihnen muss möglicherweise den anderen unterbrechen(), aber nur, wenn der andere Thread gerade Daten verarbeitet, die sich auf das Objekt beziehen, das vom ersten Thread betroffen ist. Wie kann ich den zweiten Thread nur unter bestimmten Bedingungen unterbrechen?
Ich habe an einem Programm gearbeitet, das zwei Threads für die Verarbeitung von Socket-Daten und die Aktualisierung der grafischen Benutzeroberfläche mit den Informationen in Gang setzt. Die beiden Threads (topologyThread und dataThread) behandeln zwei verschiedene Aspekte meiner Anwendung, nämlich Benachrichtigungen über Topologieänderungen für unser drahtloses Sensornetzwerk und Dateninformationen für den Empfang und die Verarbeitung von Daten aus dem drahtlosen Sensornetzwerk.
Wenn Daten im dataThread ankommen, ist es möglich, dass das Netzwerkmitglied, das das Datenpaket repräsentiert, bereits vom topologyThread entfernt wurde und als solches nicht verarbeitet werden sollte. Ich dachte also, dass die Verwendung der Methode Thread.Interrupt() es mir ermöglichen würde, den dataThread sofort über Änderungen an der Topologie zu benachrichtigen und einige der Probleme zu vermeiden, die wir bei dem Versuch gesehen haben, die GUI mit Daten für ein Netzwerkmitglied zu aktualisieren, das nicht mehr verbunden ist. Meine Frage ist folgende: Wie kann ich feststellen, ob der dataThread unterbrochen werden muss? Ich möchte nicht, dass er eine Ausnahme auslöst, während er Daten für ein Netzwerkmitglied verarbeitet, das noch verbunden ist, aber ich möchte, dass er unterbrochen wird, wenn er mitten in der Verarbeitung von Daten für ein Netzwerkmitglied ist, das dann getrennt wird.
Szenario 1:
- Die Daten kommen über den dataThread herein.
- dataThread stellt sicher, dass das Netzwerkmitglied noch Teil des Netzwerks ist.
- dataThread verarbeitet Daten bis zum Ende und aktualisiert GUI
Szenario 2:
- Die Daten kommen über den dataThread herein.
- dataThread stellt sicher, dass das Netzwerkmitglied noch Teil des Netzwerks ist.
- Die Verbindung zum Netzwerk wurde unterbrochen, so dass keine Verarbeitung stattfindet.
Szenario 3:
- Die Daten kommen über den dataThread herein.
- dataThread stellt sicher, dass das Netzwerkmitglied noch Teil des Netzwerks ist.
- dataThread beginnt mit der Verarbeitung von Daten
- topologyThread erhält die Nachricht, dass das Netzmitglied nicht mehr angeschlossen ist und entfernt es aus der Topologie.
- dataThread versucht, die GUI für ein Netzwerkmitglied zu aktualisieren, das nicht mehr verbunden ist.
Es ist Szenario 3, für das ich versuche, einen Code zu erstellen. In unseren Tests ist dieses Szenario, wo die Baumansicht in der Seitenleiste einfriert und die App beendet werden muss. Aber ich muss den dataThread nur unterbrechen, wenn das Objekt, das vom topologyThread betroffen ist, dasjenige ist, auf das der dataThread gerade wirkt.
Danke fürs Lesen :)