0

BackgroundWorkerを生成するUIボタンがあります。このBackgroundWorkerは、いくつかの操作を実行するいくつかのBackgroundWorkerを生成します。メインのBackgroundWorkerですべての内部BackgroundWorkerが完了するのを待つ方法はありますか?

4

2 に答える 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 に答える