2011-01-06 6 views
2

私はbackgroundworkerについて質問があります。C#Stop BackgroundWorker

私はバックグラウンドワーカーで無限ループをしています。どうすればそれを止めることができますか?

+1

私たちは問題が何であるかについてより多くの洞察力を持つことができるように、作業員のコードを記入してください。 (コードブロックを削除して、ワーカーを初期化する場所、ワーカーが何をしているのか、現在停止していることを示す場合でも)。 –

答えて

10

無限ループに変更してください。

BackgroundWorkerには、キャンセルのサポートが組み込まれています。バックグラウンドワーカーコールBackgroundWorker.CancelAsyncを取り消すには

CancelAsyncは保留中のバックグラウンド操作を終了する要求を送信し、CancellationPendingプロパティをtrueに設定します。

CancelAsyncを呼び出すと、ワーカーメソッドには実行を停止して終了する機会があります。作業者コードは、CancellationPendingプロパティが定期的にtrueに設定されているかどうかを確認する必要があります。あなたのワーカースレッドで、この無限ループを持っている場合

したがって、たとえば:キャンセルはあなたにも設定する必要が動作するためには

while (!backgroundWorker.CancellationPending) 
{ 
    ... 
} 

while (true) 
{ 
    ... 
} 

その後、あなたはそれを変更することができますプロパティBackgroundWorker.WorkerSupportsCancellationtrue。これはデザイナーで行うことができます。