vb.net中线程挂起时如何关闭线程
我试图在线程挂起时关闭窗体,但出现以下错误:vb.net中线程挂起时如何关闭线程,vb.net,multithreading,Vb.net,Multithreading,我试图在线程挂起时关闭窗体,但出现以下错误:线程挂起;正在尝试中止。 如果线程正在运行,我单击按钮关闭它 这是我的代码: Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click t1.Abort() Me.Close() End Sub 即使线程挂起或未挂起,我也要关闭窗体。这里有一个线程休眠模式以及如何“中止”线
线程挂起;正在尝试中止。
如果线程正在运行,我单击按钮关闭它
这是我的代码:
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
t1.Abort()
Me.Close()
End Sub
即使线程挂起或未挂起,我也要关闭窗体。这里有一个线程休眠模式以及如何“中止”线程。请注意.WaitOne可以接受一个类似于Thread.Sleep的参数
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
'start a thread
If IsNothing(somethrd) Then
somethrd = New Threading.Thread(AddressOf test)
somethrd.IsBackground = True
somethrd.Start()
End If
End Sub
Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
'stop
stopsomethrd = True
somethrdwait.Set()
somethrd.Join()
Debug.WriteLine("end")
End Sub
Dim somethrd As Threading.Thread
Dim somethrdwait As New Threading.AutoResetEvent(False)
Dim stopsomethrd As Boolean
Private Sub test()
Do
'your code
somethrdwait.WaitOne() 'suspend thread
If stopsomethrd Then Exit Do
Loop
End Sub
永远不要挂起线程。它是邪恶的。而且不要。中止线程,充满了gotcha。你可以为你的线程设置IsBackground()为True,这将允许它在应用程序关闭时自动终止它。但是我同意前面的帖子,你不应该使用Suspend()或Abort()!正如其他人所说,如果可以的话,用任务代替。有取消的能力,这真的很好。认真看看这个。