| ■No13054 (モー さん) に返信 > 強制終了が好ましくないことは承知しておりますが、実際問題として10個のスレッドを同時に動作している最中に > そのうちの1個だけがフリーズした場合にそれを終了させ、残りの9個は動作させ続けたいのです。
そもそもフリーズすることがおかしいので、 普通ならそういう「実際問題」になることはありません。 そういう場合には、フリーズしたらどうするか、ではなく、フリーズしないように考えます。
> またそのフリーズしたスレッドからは信頼できる情報が取得できるとは限らないので、外部から強制終了するしかないと思います。 > そうした場合に、ボタンイベントで外部からthread1.Name等を用いて???.Abort()のような記述で終了させられないかと悩んでいます。
どうしてもやりたいなら、 DictionaryやHashTableにスレッド名とスレッドオブジェクトを入れておいて、 それを参照して殺せばいいのではないでしょうか?
private threadlist as Dictionary(Of String, Thread)
Private Sub XXX() dim thread1 As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf cls.PageChange)) thread1.start() threadlist.Add(strName, thread1) End Sub
...
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
if threadlist.Contains(textbox1.text) then threadlist(textbox1.text).Abort end if
End Sub
激しく適当ですが、こんな感じで。
|