2017-07-26 25 views
0

実行中の場合は、ユーザーがアプリケーションを閉じることを要求すると、BackgroundWorkerが終了するのをどのように待つことができますか?私はこれを待ってBackgroundWorkerを終了してから終了したいと思います。私はAutoResetEventを試しましたが、FormClosing時にWaitOne()を呼び出すとUI全体がブロックされ、Set()が呼び出されたRunWorkerCompletedイベントは発生しません。 どうすればこのことができますか?実行中の場合、FormClosing時にBackgroundWorkerの終了を待つ

私はこのための代替/適切な方法を探しています:ユーザーがしようとした場合

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; 

を持っていますフォームを閉じて、イベントをクローズするイベントで、ワーカーがisbusyかどうかをチェックし、イベントをキャンセルして設定します。quitRequestedWhileWorkerBusy=true

作業完了イベントでは、if(quitRequestedWhileWorkerBusy) this.Close();

+0

nice idea、thanks :) – Jack

関連する問題