【发布时间】:2012-07-14 03:56:45
【问题描述】:
我有一个从某些网站获取数据的循环,该循环大约需要一个小时才能获取数据并将其填充到数据库中,这个循环在一个线程中,我想添加一个按钮来暂停线程,直到再次单击按钮并从停止的地方恢复。 我怎样才能安全地做到这一点?
【问题讨论】:
-
看看这个 MSDN forum post 是否有帮助
标签: .net vb.net multithreading
我有一个从某些网站获取数据的循环,该循环大约需要一个小时才能获取数据并将其填充到数据库中,这个循环在一个线程中,我想添加一个按钮来暂停线程,直到再次单击按钮并从停止的地方恢复。 我怎样才能安全地做到这一点?
【问题讨论】:
标签: .net vb.net multithreading
这是一个简单的 Windows 控制台应用程序;它使用布尔标志来指示线程是否应该处理。我希望这能为您指明正确的方向。
Module Module1
Private _ThreadControl_Run As Boolean = False
Sub Main()
Dim thread As New System.Threading.Thread(AddressOf ThreadWorker)
thread.IsBackground = True
thread.Start()
_ThreadControl_Run = True
Console.WriteLine("Main() _ThreadControl_Run = " & _ThreadControl_Run.ToString())
System.Threading.Thread.Sleep(1000)
_ThreadControl_Run = False
Console.WriteLine("Main() _ThreadControl_Run = " & _ThreadControl_Run.ToString())
System.Threading.Thread.Sleep(1000)
_ThreadControl_Run = True
Console.WriteLine("Main() _ThreadControl_Run = " & _ThreadControl_Run.ToString())
System.Threading.Thread.Sleep(1000)
_ThreadControl_Run = False
Console.WriteLine("Main() _ThreadControl_Run = " & _ThreadControl_Run.ToString())
System.Threading.Thread.Sleep(1000)
End Sub
Private Sub ThreadWorker()
Do While True
If (_ThreadControl_Run) Then
Console.WriteLine(" ThreadWorker()")
System.Threading.Thread.Sleep(100)
End If
Loop
End Sub
End Module
【讨论】:
试试这个:
Public Sub PauseThreadButton_Click(sender As System.Object, e As System.EventArgs) Handles PauseThreadButton.Click
'REM: Next line puts your thread in a suspended state
TheThread.Suspend()
End Sub
继续:
Public Sub ResumeThreadButton_Click(sender As System.Object, e As System.EventArgs) Handles ResumeThreadButton.Click
'REM: Next line resumes your thread
TheThread.Resume()
End Sub
【讨论】:
Suspend 替换为Abort。