私のアプリケーションは、時間のかかる作業をいくつかのファイルに対して個別に実行します。各ファイルに作業を渡すための BackgroundWorker を作成しましたが、backgroundworker は非同期作業しか実行できないようです。それと調和していくつかの非同期タスクを実行することは可能ですか、または同期操作を実行するための同様のオブジェクトがありますか?
3 に答える
バックグラウンド ワーカーは通常、UI の更新や作業の受け渡しに使用されるため、長時間実行されるプロセスが発生したときに UI がフリーズすることはありません。これは、バックグラウンドワーカープロセスに「ファイル作業」を「渡し」、コールバックを使用して(通常は)アプリが応答している間ずっとUIを更新することを意味します。
項目が独立している場合は、作業を分割するためにいくつかのスレッドをスプールすることができます。繰り返しますが、私があなたを正しく理解していれば。私がそうだとしたら、Jon Skeet のスレッドに関する記事を参照してください。
BackgroundWorker を使用することもできますが、作業を行うにはいくつかのスレッドを単純にスピンオフする必要があると思います。1 つのスレッド (おそらくメイン スレッド) がこれらのワーカー スレッドを作成して開始し、すべてのワーカーに対して Join を実行して、処理が完了するのを待ちます。
または、.Net 3.5 を使用している場合は、.Net の Parallel Extensions を参照してください。そのライブラリの Task オブジェクトは、おそらくあなたの状況に最適です。
コード内に複数の BackgroundWorker オブジェクトを作成することで、複数の非同期タスクを実行できます。一度に実行する合計数を制御できるように、実行する多数の BackgroundWorker オブジェクトを作成する JobPool クラスを作成しました。しかし、処理するファイルが数個しかない場合、これはやり過ぎです。