读书人

thread.about,该怎么解决

发布时间: 2012-03-31 13:13:26 作者: rapoo

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]
.Stopped Then
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我不熟,你自己找找例子看看。
[解决办法]
通过接受信号来终止线程把?

读书人网 >VB Dotnet

热点推荐