C# でダウンローダを作成していて、次の問題で停止しました: ダウンロードを並列化し、GUI を更新するには、どのような方法を使用すればよいですか?
私の最初の試みでは、4 つのスレッドを使用し、それぞれの完了時に別のスレッドを開始しました。主な問題は、新しいスレッドが開始されるたびに CPU が 100% になることでした。
グーグルで調べてみると、BackgroundWorker と ThreadPool の存在が見つかりました。ダウンロードしている各リンクの進行状況で GUI を更新したいのですが、最善の解決策は何ですか?
1) 4 つの異なる BackgroundWorker を作成し、各 ProgressChanged イベントに Delegate を GUI の関数にアタッチして進行状況を更新しますか?
2) ThreadPool を使用し、スレッドの最大数と最小数を同じ値に設定しますか?
#2 を選択した場合、キューにスレッドがなくなると、4 つの作業スレッドが停止しますか? それらを一時停止しますか?リンクのさまざまなリスト (それぞれ 20 個のリンク) をダウンロードし、1 つが完了すると別のリストに移動する必要があるため、ThreadPool は各リスト間でスレッドを開始および停止しますか?
ライブで作業中のスレッドの数を変更し、ThreadPool を使用して 10 スレッドから 6 スレッドに変更したい場合、スローして例外を発生させ、4 つのランダム スレッドを停止しますか?
頭を悩ませているのはこの部分だけです。ご回答いただきありがとうございます。