BackgroundWorkerを生成するUIボタンがあります。このBackgroundWorkerは、いくつかの操作を実行するいくつかのBackgroundWorkerを生成します。メインのBackgroundWorkerですべての内部BackgroundWorkerが完了するのを待つ方法はありますか?
質問する
1112 次
2 に答える
5
Semaphoreを作成し、生成されたバックグラウンド ワーカーに渡し、バックグラウンド ワーカー コードの最後でReleaseメソッドを呼び出すことができます。メイン ワーカーでは、生成されたワーカーの数に等しい正確な回数、WaitOneを呼び出します。try ... finally
何か問題が発生した場合にアプリケーションがハングしないように、すべてをラップしてください。
.net 4 を使用している場合は、 SemaphoreSlimの使用を検討してください。これは、同じ機能を持つ軽量バージョンです。
于 2012-08-07T16:21:56.247 に答える
0
メインのワーカー コードで、他のワーカーのIsBusy プロパティを確認できます。
"BackgroundWorker が非同期操作を実行しているかどうかを示す値を取得します。"
Private Sub BackgroundWorkerMaster_DoWork(sender As System.Object, e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorkerMaster.DoWork
Do While bgwChild1.IsBusy AndAlso bgwChild2.IsBusy
System.Threading.Thread.Sleep(1) 'wait for a small amount of time
Loop
End Sub
于 2012-08-07T16:20:44.920 に答える