Heim >Backend-Entwicklung >C++ >Wie stoppt ich einen Hintergrundarbeiter beim Schließen eines Windows -Formulars sicher?

Wie stoppt ich einen Hintergrundarbeiter beim Schließen eines Windows -Formulars sicher?

Barbara Streisand
Barbara StreisandOriginal
2025-01-31 17:06:12663Durchsuche

How to Safely Stop a BackgroundWorker When Closing a Windows Form?

Der Hintergrundarbeitsthread, wenn das Fenster Windows elegant geschlossen ist

Bei der Verwendung des Hintergrundarbeiters im Windows -Fenster besteht ein häufiges Problem darin, den Arbeitsfaden zu stoppen, wenn das Fenster geschlossen ist. Ein einfaches Aufrufen von

im Fensterschließungsereignis zur Verarbeitung von Ereignissen kann jedoch abnormale oder verkleidete Schlösser verursachen. bgWorker.CancelAsync()

Frage 1: ObjectDiSPoxception in Invoke -Anrufe

Wenn

direkt im Fensterabschlussereignisverarbeitungsprogramm aufgerufen wird, kann der nachfolgende Aufrufanruf

Abnormalitäten werfen. Dies liegt daran, dass das Fenster freigegeben wird und der Haupt -Thread beendet ist. bgWorker.CancelAsync() ObjectDisposedException Frage 2: Der Deadlock, wenn BGWWER abgeschlossen ist

Warten beim Schließen des Ereignisverarbeitungsprozesses

Abschluss kann zu toten Schlössern führen, da aufgerufene Anrufe noch im Gange sind, um zu verhindern, dass der Arbeits -Thread abgeschlossen ist.

bgWorker Lösung: Koordinieren Sie den Verschluss des Fensters und die Hintergrundarbeitsleitung, um

zu vervollständigen

Um diese Probleme zu lösen, ist eine stabilere Methode erforderlich:

im Fenster, das das Ereignisverarbeitungsprogramm schließt, wenn
    noch ausgeführt wird, setzen Sie
  1. . bgWorker e.Cancel = true Stellen Sie ein Logo
  2. fest, um die Anfrage des Benutzers zum Schließen anzuzeigen.
  3. closePending Überprüfen Sie im Ereignisverarbeitungsprogramm das
  4. -Logo. Wenn Sie festgelegt wurden, rufen Sie
  5. im Fenster an. bgWorker RunWorkerCompleted closePending Close() Diese Methode kann durch die Fertigstellung des Fensters Abnormalitäten und tote Schlösser verhindern, um das Ereignis und die Fertigstellung von
  6. zu schließen.

Das obige ist der detaillierte Inhalt vonWie stoppt ich einen Hintergrundarbeiter beim Schließen eines Windows -Formulars sicher?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn