2017-07-26 4 views
0

Wie kann ich warten, bis BackgroundWorker zu beenden, wenn ausgeführt, wenn der Benutzer die Anwendung schließen? Ich würde gerne auf diese BackgroundWorker beenden beenden dann Anwendung beenden. Ich versuchte mit AutoResetEvent, aber ein Anruf an WaitOne() bei FormClosing Zeit scheint die gesamte Benutzeroberfläche zu blockieren und feuert kein RunWorkerCompleted-Ereignis, wo Set() aufgerufen wird. Wie kann ich das erreichen?Warten auf BackgroundWorker, wenn ausgeführt, um FormClosing-Zeit

Ich bin auf der Suche nach einer Alternative/die richtige Art und Weise dafür:

bool done = false; 
     private void my_backgroundWorker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e) 
     { 
      resetEvent.Set(); 
      done = true; 
     } 

     private void myForm_FormClosing(object sender, FormClosingEventArgs e) 
     { 
      if (notify_backgroundWorker.IsBusy) 
      { 
       while(!done) 
       { 
        Application.DoEvents(); 
        Thread.Sleep(500); 
       } 
       //resetEvent.WaitOne(); 
      } 
     } 
+1

Siehe [Wie man BackgroundWorker auf dem Closing-Ereignis des Formulars stoppt?] (Https://stackoverflow.com/q/1731384/719186) – LarsTech

Antwort

1

Keine Notwendigkeit, es so komplex zu machen, haben nur eine Klassenstufe Variable

bool quitRequestedWhileWorkerBusy=false; 

Wenn der Benutzer versucht, Schließen Sie das Formular, im Formular schließen Ereignis überprüfen, ob der Arbeiter isbusy, das Ereignis abbrechen und quitRequestedWhileWorkerBusy=true

In Ihrem Worker abgeschlossen Ereignis, if(quitRequestedWhileWorkerBusy) this.Close();

+0

Nette Idee, danke :) – Jack

Verwandte Themen