Dies ist ein Ausschnitt aus meiner Klasse:
%Vor%In ThreadDealer () setze ich die boolesche Variable "_start" auf false oder true. Was ich jetzt brauche, aber anscheinend nicht herausfinden kann, ist ein Ereignis, das start () auffordert, seine Rückkehranweisung auszuführen, wenn der ThreadDealer () - Thread beendet ist.
Ich habe etwas mit einem AutoResetEvent und .WaitOne () versucht, aber da ich eine GUI habe, die alles blockiert und währenddessen tut, was ich tun muss (bis der Thread fertig ist), ist es nutzlos, wenn es meine GUI blockiert .
Jede Hilfe wäre sehr willkommen.
Was Sie tun möchten - Warten Sie auf den Hintergrundthread in einer Methode des UI-Threads, aber die Benutzeroberfläche kann immer noch reagieren - ist nicht möglich. Sie müssen Ihren Code in zwei Teile aufteilen: Einer wird vor dem Start (oder parallel dazu) des Hintergrund-Threads ausgeführt und der andere wird ausgeführt, nachdem der Hintergrund-Thread beendet wurde.
Am einfachsten ist es, die BackgroundWorker-Klasse zu verwenden. Es löst ein Ereignis im UI-Thread ( RunWorkerCompleted
) aus, nachdem seine Arbeit abgeschlossen ist. Hier ist ein Beispiel:
Erhebe nur ein Ereignis. Es wird auf dem falschen Thread ausgeführt, so dass der Event-Handler damit umgehen muss, indem er den Aufruf migriert, falls nötig, um eine UI zu aktualisieren. Durch Verwendung von Control.Begin / Invoke oder Dispatcher.Begin / Invoke abhängig davon, welche Klassenbibliothek Sie verwenden.
Oder verwenden Sie die BackgroundWorker-Klasse, dies geschieht automatisch.
Tags und Links .net c# multithreading events