thread.about
- VB.NET code
Private Sub Work() ‘线程 Dim i As Integer =0 Do Thread.Sleep(1000) i += 1 If Work_status = False Then Exit Sub ’如果不加这句,退出线程是跑出异常 第一可能生的例外型 'System.Threading.ThreadAbortException' 生於 Microsoft.VisualBasic.dll writestatus("找零点" & i & "秒") '委托 Debug.Print(i) Loop Until i = 10 end sub 按钮事件 Work_status = False If Workline IsNot Nothing Then Try If Workline.ThreadState <> ThreadState[code=VB.NET]Workline.Abort() ‘这里抛出
End If
Catch ex As ThreadAbortException
Debug.Print(ex.ToString)
Thread.Sleep(500)
Workline.Abort()
End Try[code=VB.NET][/code]
[/code]
why???
[解决办法]
Workline.Abort()是不安全终止线程,优雅的程序设计是绝对不会使用这个函数的。正确的做法是安全退出线程。
笨点的方法是在Work_status = False后面睡眠大于1000MS的时间,但是这样会导致界面假死1000MS,这样,等待线程执行完成Thread.Sleep(1000)后线程就自己退出了。
当然有更好的方法,通过信号机制控制,C++中可以在线程中使用WaitForSingleObject+SetEvent函数控制时间暂停,VB中应该也有类似的方式,VB我不熟,你自己找找例子看看。
[解决办法]
通过接受信号来终止线程把?