Windows Forms + Threads = einzelne Fenster ausgelastet?

NSRKris

Grünschnabel
Hallo zusammen,

folgendes Problem:

Ich habe ein Programm geschrieben das über eine grafische Oberfläche verfügt. Im Hintergrund gibt es eine Klasse bzw. ein Objekt "Datenverwaltung" das die Daten verwaltet. In diesem Objekt gibt es eine Objekt "Waage", das über eine serielle Schnittstelle mit einer Waage kommuniziert. Wenn neue Daten auf der seriellen Schnittstelle kommen (Event SerialDataRecieved), dann werden die Daten verarbeitet und dann ein Event gefeuert ("Gewichtsänderung"), das von der "Datenverwaltung" aufgefangen wird.
Parallel hat die "Datenverwaltung" ein Objekt "Reader" das in einem eigenen Thread läuft und ständig überprüft, ob RFID-Tags vorhanden sind. Wenn ein RFID-Tag auftaucht oder verschindet wird auch hier ein Event gefeuert, der von "Datenverwaltung" verarbeitet wird.
Bei einem Event "Gewichtsänderung" werden die vorhandenen Daten mit denen des Readers kombiniert und danach wird in der Methode in "Datenverwaltung" (die Methode die auch kombiniert) ein neuer Event gefeuert, der vom Hauptfenster "gefangen" wird. Das Hauptfenster öffnet darauf ein neues Forms-Fenster. Bei diesem Fenster kann man allerdings nichts mehr tun und der Mauszeiger ist eine Sanduhr. Auch Schließen des Fensters klappt nicht.
Das Hauptfenster kann aber trotz des hängenden Fensters normal weiter genutzt werden und zeigt keine Geschwindigkeitseinbrüche.


Kann es sein, dass das Fenster was hängt in irgendeinem der beiden Threads (läuft eine Serielle Schnittstelle in einem eigenen Thread?) festhängt?
Liegt es daran, dass in der Methode, die einen Event verarbeitet auch ein neuer Event gefeuert wird?


Vielen Dank für eure Hilfe!
 
Hi

Die Events, die geworfen werden laufen in deinem WorkThread.
Wenn ich dich richtig verstanden hab, werden darauf auch die neuen Fenster geöffnet.
Diese laufen demnach auch in diesem Thread und hängen dann natürlich.
Du solltest das Öffnen der neuen Fenster per Delegate (nicht Event) an die Form oder eine andere Klasse, die im Thread der Form läuft, übergeben, die dann das neue Fenster öffnet.
 
Zurück