在方法中间退出线程?

时间:2017-09-30 03:51:15

标签: vb.net multithreading

我无法实现workerthreads,因为已经开发了太多用自己的线程调用方法的类。似乎,如果有任何循环代码来监视正在运行的线程的完成,允许启动的线程完成其工作的唯一方法是提供它们" sleep"时间。否则,坐在线程外部的WaitOne或尝试使用Do-While循环等待线程完成的任何事情都很难成功执行。

下面是我的代码,它监视ThreadList中线程的完成,它在大多数情况下工作,但是,我在一个正在运行的方法(通过实例化类中的线程触发)中通过断点进行跟踪,并且代码简单确定线程已完成,因此执行离开方法并继续在外部线程完成监视代码中。

您是否在下面的代码中看到任何问题会导致线程错误地发出信号已完成,从而导致执行离开For循环?此外,使用这种方法是否会将过多的线程休眠时间添加到内存中?

startagain:
For Each t In threadList
  If t.ThreadState = Threading.ThreadState.Stopped = False Then
     wait(1)
     GoTo startagain
  End If
  If t.ThreadState = Threading.ThreadState.Stopped = True Then Exit For
Next

Private Sub wait(ByVal seconds As Integer)
  For i As Integer = 0 To seconds * 100
    System.Threading.Thread.Sleep(10)
    Application.DoEvents()
  Next
End Sub

1 个答案:

答案 0 :(得分:1)

如果断点存在,Visual Studio的调试器将从线程切换到线程,因为它们并发运行。我相信这解释了你问题的这一部分"所以执行离开了方法并继续在外部线程完成监控代码中#34;。

我推测你的问题是,如果单个线程停止,你就会退出for循环,但是你正在遍历一个线程列表。 删除此代码,我相信您的问题将得到解决:

If t.ThreadState = Threading.ThreadState.Stopped = True Then Exit For

最后,这是一个good MSDN link,它描述了使用Visual Studio的不同多线程调试技术。