チェックボックスの数に基づいて複数回呼び出す必要があるバックグラウンドワーカーがあります-チェックボックスの値を取得してList
.
List repSelected = new List();
これは入力され、次のように繰り返されます。
foreach (string rep in repSelected)
{
backgroundWorker1.RunWorkerAsync(rep);
backgroundWorker1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker1_RunWorkerCompleted);
}
非同期の DoWork コードは次のようになります。
BackgroundWorker worker = sender as BackgroundWorker;
string rep = e.Argument.ToString();
if (worker.CancellationPending == true)
{
e.Cancel = true;
}
else
{
DirectoryExists(rep);
ProcessRunner(rep); //Rars some large files - expensive
}
次に、プロセスは WorkerComplete を実行します。問題は、プロセスがワーカーの次の反復を実行するために戻ったときに、ワーカーがビジーであると言ってクラッシュすることです。ワーカーが WorkerCompleted ステータスを返したとしてもです。
ループの次の繰り返しの前にスレッドが閉じていることを確認するにはどうすればよいですか?
NB: バックグラウンド ワーカーに条件を設定しました!backgroundWorker1.IsBusy()
が、これは (明らかに) 実行せずに残りの反復をスキップしただけです。