2017-07-26 56 views
0

如果正在運行,如何在用戶請求關閉應用程序時等待BackgroundWorker完成?我想等這BackgroundWorker完成,然後退出應用程序。我嘗試使用AutoResetEvent,但在FormClosing時調用WaitOne()似乎阻止整個UI,並且不會觸發調用Set()的RunWorkerCompleted事件。 我該如何做到這一點?等待BackgroundWorker完成後,在FormClosing時間運行

我正在尋找替代/有道此:

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

請參閱[如何在窗體關閉事件中停止BackgroundWorker?](https://stackoverflow.com/q/1731384/719186) – LarsTech

回答

1

沒有必要做起來很複雜,只是有一個類級別的變量

bool quitRequestedWhileWorkerBusy=false; 

如果用戶試圖關閉表格,在表格閉幕事件中檢查工作人員是否過於忙碌,取消事件並設置quitRequestedWhileWorkerBusy=true

在您的工人完成活動中,if(quitRequestedWhileWorkerBusy) this.Close();

+0

好主意,謝謝:) – Jack

相關問題