如果用户希望中断执行,我需要另一个线程信号,但是我不确定如何实现信号/信号检查机制。我不想在我的项目中有一个单例(比如 global bool
),但是有没有其他选择?
在这个线程中,人们建议在 C++ 中使用适当的结构,但我不知道 .NET 中有任何类似的东西。有人可以解释一下吗?
如果用户希望中断执行,我需要另一个线程信号,但是我不确定如何实现信号/信号检查机制。我不想在我的项目中有一个单例(比如 global bool
),但是有没有其他选择?
在这个线程中,人们建议在 C++ 中使用适当的结构,但我不知道 .NET 中有任何类似的东西。有人可以解释一下吗?
试试BackgroundWorker。它支持进度更新和取消正在运行的任务。
如果您希望一个线程等到另一个线程完成它的工作,那么 Monitor.Wait 和 Monitor.Pulse 都很好,ManualResetEvent 也是如此。但是,这些对于取消正在运行的任务并没有任何用处。
如果你想编写自己的取消代码,你可以在某个地方有一个两个线程都可以访问的字段。将其标记为 volatile,例如:
private volatile bool cancelling;
让主线程将其设置为 true,并让工作线程定期检查它并在完成后将其设置为 false。
这与拥有一个“全局变量”并没有真正的可比性,因为您仍然可以将信号量变量的范围限制为类私有。
有点模糊(时间短),但请查看ManualResetEvent 和 AutoResetEvent。您可能还想查找 Monitor 和 lock 关键字。
查看 Monitor.Wait 和 Monitor.Pulse。这是一篇关于 .Net 中的线程的优秀文章(非常易读):http ://www.albahari.com/threading/part4.aspx
一个简单的解决方案,如同步的静态布尔值,应该是您所需要的,而不是基于框架的解决方案,这对于您的场景来说是多余的。如果您仍然需要一个框架,请查看.NET 的并行扩展以获得想法。
这取决于您需要什么样的同步。如果您希望能够在循环中运行线程直到达到某种执行结束 - 您只需要一个静态 bool 变量。如果您希望一个线程等待另一个线程到达执行点,您可能需要使用 WaitEvents(AutoResetEvent 或 ManualResetEvent)。如果您需要等待多个 waitHandle,您可以使用 WaitHandle.WaitAll 或 WaitHandle.WaitAny。
查看 System.Runtime.Remoting 命名空间。