首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

thread.about,该怎么解决

2012-03-31 
thread.aboutVB.NET codePrivate Sub Work()‘线程Dim i As Integer 0DoThread.Sleep(1000)i + 1If Work_

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

热点排行