短い質問:
キューに送信された作業項目を処理する単一のバックグラウンド スレッドを生成したいと考えています (1 つのスレッドを持つスレッドプールなど)。作業項目には、進行状況を報告できるものとできないものがあります。.NET の無数のマルチスレッド アプローチのうち、どれを使用する必要がありますか?
長い説明(意味をなさない半分について尋ねるのを避けるため):
私の winforms アプリケーションのメイン ウィンドウは、縦に 2 つに分割されています。左半分には、アイテムを含むツリービューが含まれています。ユーザーがツリービュー内の項目をダブルクリックすると、その項目が右半分に開かれます。ほとんどすべてのオブジェクトには、複数のセクション (タブで表される) に分割された多数のプロパティがあります。これらのプロパティの読み込みにはかなりの時間がかかり、通常は約 10 秒、場合によってはそれ以上かかります。また、時々プロパティが追加されるため、時間が長くなります。
現在、私のシングルスレッド設計では、UI が応答しなくなります。当然、これは望ましくありません。バックグラウンドでパーツごとにロードし、パーツがロードされるとすぐに使用できるようにしたいと思います。他の部分については、ローディング アニメーションなどを含むプレースホルダー タブを表示します。また、1 回の長いモノリシック操作で読み込まれる部分もあれば、多数の小さな関数呼び出しと計算で構成される部分もあるため、読み込みの進行状況を表示できます。これらの部分については、進捗状況を確認できれば幸いです (特に、どこかにぶら下がっている場合)。
データ ソースはスレッド セーフではないため、2 つの部分を同時に読み込むことはできません。
この動作を実装するには、どのようなアプローチが最適でしょうか? 私の肩からいくつかの作業を持ち上げる.NETクラスはありますか、それとも単に降りて汚れるべきThread
ですか?
AThreadPool
は作業項目のキュー管理を行いますが、進行状況を報告する機能はありません。BackgroundWorker
一方、進行状況レポートをサポートしていますが、これは単一の作業項目を対象としています。おそらく両方の組み合わせはありますか?