バックグラウンドで多くのスレッドを実行するアプリケーションをコーディングしています。これらのスレッドはメイン スレッドに報告する必要があるため、インターフェイスのテーブルを更新できます。以前は、ワーカー スレッドは、次のようなものを使用してメイン スレッドから実行した通常の個別のクラス (Citizen という名前) でした。
new Thread(new ThreadStart(citizen.ProcessActions)).Start();
ここで、ProcessActions 関数は、すべてのバックグラウンド作業を行うメイン関数でした。実際にスレッドを開始する前に、イベント ハンドラーを登録して、Citizen スレッドがインターフェイスにログを記録/レポートできるようにします。通常、これらの Citizen スレッドは数十 (約 50) あり、それらはかなり大きなクラスです。それぞれに独自の HTTP クライアントがあり、Web を閲覧します。
これはスレッドを管理する良い方法ですか? 率直に言って、おそらくそうではありません。スレッドが正常に終了していないことは確かです。ProcessActions 関数が完了したら、イベント ハンドラーを削除します。それだけです。新しい Citizen が起動するたびに、メモリ使用量が増加し続けます。
頻繁に通信する必要がある多くの (50 以上の) スレッドを管理するための最良の方法は何でしょうか? 他のスレッドからアクセスするのではなく、独自のスレッドであるため、Citizen 変数のスレッド セーフについてあまり心配する必要はないと思います。