スレッドを単に終了するよりも、スレッドが停止する理由を理解しようとする方がよいでしょう。アタッチされた Visual Studio デバッガーでこれを再現できる場合は、[一時停止] ボタンをクリックし、[スレッド] ウィンドウを使用して、すべてのスレッドがどのコードに含まれているかを確認できます。
そうは言っても; それでもこれを行う必要がある場合、解決策はスレッドの管理方法によって異なります。それらを外部から監視するには、スレッドのリストと、スレッドが停止しているかどうかを判断できるプロセスが必要です。
このThread
クラスには、スレッドとそのコントロールの間で状態を共有するためのメカニズムが組み込まれていないようですName
。名前を悪用することもできますが、ConcurrentDictionary<Thread, DateTime>
すべてのスレッドと最後の通信のタイムスタンプを格納するためのスレッド セーフなコレクション (たとえば a ) をAction
用意し、開始時に各スレッドに an を渡して、" Ping
"アクションを定期的に呼び出すことによって。アクションは、DateTime
そのスレッドに対して格納されているものを更新するだけです。
次に、制御プロセスは、辞書を定期的にスキャンして、タイムスタンプが古すぎるものを探し、そのスレッドが死んでいると宣言しますAborts()
。
スレッドを生成する方法を正確に把握せずにコード サンプルを提供することは困難であり、スレッドが「接続されている」ことの意味をより詳細に説明することは困難です。