2012-03-09 12 views
0

私はバックグラウンドスレッドを実行して、Windowsアプリケーションの一部のプロファイルデータを移動しています。このスレッドは、特定の間隔でpriodically実行されます。メインフォームをキャンセルします。スレッドが戻ってきている間に閉じる、C#.windowsアプリケーションですか?

スレッドが実行されている間にフォームを閉じようとすると、スレッドの実行に関するプロンプトが表示され、ユーザーがフォームを閉じることを許可しないでください。一度(スレッド)が完了したら、私はフォームを閉じる必要があります。

私は 'Form_Closing'イベントでそれを行うと、スレッドが停止します(私はデバッグ時)、コントロール はフォーム自体にとどまります。フォームを閉じた後、スレッドは..を再開し、問題がないかどうかを確認します。

どうすれば効果的ですか?

private void Form1_FormClosing(object sender, FormClosingEventArgs e) { 
     if (backgroundWorker1.IsBusy) { 
      MessageBox.Show("Thread busy!"); 
      e.Cancel = true; 
     } 
    } 

答えて

1

。それが本当であれば、フォームが閉じないようにしてください。e.Cancel =!Thread.IsAlive

+1

この解決方法は彼のフォームが閉じないようにしますが、次回にスレッドが再び起動するとエンドユーザーにとって非常に迷惑になることがありますユーザーはフォームを閉じようとします。スレッドが完了すると自動的にフォームを閉じたり、スレッドに定期的なタスクを実行してはならないことを示すためにフラグを送信したりする必要があります。 – Tung

0

あなたは、フォーム内のスレッドへの参照を持っている場合、あなたはOnFormClosingイベントでそのIsAliveプロパティをチェックすることができます:あなたはCancelプロパティを使用することができ、フォームClosingイベントで

関連する問題