|
そもそも例外になるケースが違っているような気がします。
以下のサンプルはbutton1でスレッドを開始、button2でスレッドをAbortさせます。
chkNoLoopのチェックが入っていない時はスレッドは無限ループをしAbortされるとException処理でConsoleに"Aborted"と表示し
チェックが入っているときはすぐに終了しConsoleに"Ended"を表示します。
チェックが入っていない時は処理が終了していない状態の確認が出来、チェックが入っている状態で"Ended"が表示されてからbutton2を
クリックすれば終了スレッドのAbortの確認が出来ますが、特に終了スレッドにAbortをしても例外にはなりませんでした。
認識が間違っていますでしょうか?
Public Class Form1
Private Class clsTestThread
Private m_thr As Thread
Private m_blnNoLoop As Boolean
Public Sub New()
m_thr = New Thread(AddressOf StartProc)
End Sub
Public Property NoLoop As Boolean
Get
Return m_blnNoLoop
End Get
Set(ByVal value As Boolean)
m_blnNoLoop = value
End Set
End Property
Private Sub StartProc()
Try
If Not m_blnNoLoop Then
Do While True
Thread.Sleep(50)
Loop
End If
Console.WriteLine("Ended")
Catch ex As ThreadAbortException
Console.WriteLine("Aborted")
Catch ex As Exception
End Try
End Sub
Public Sub Start()
m_thr.Start()
End Sub
Public Sub Abort()
m_thr.Abort()
End Sub
End Class
Private m_Test As clsTestThread = Nothing
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
If m_Test IsNot Nothing Then Exit Sub
m_Test = New clsTestThread
m_Test.NoLoop = chkNoLoop.Checked
m_Test.Start()
End Sub
Private Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click
If m_Test Is Nothing Then Exit Sub
m_Test.Abort()
m_Test = Nothing
End Sub
End Class
|