如果用户希望中断执行,我需要另一个线程信号,但是我不确定如何实现信令/信号检查机制。我不想在我的项目中有一个单例(如全局 bool ),但还有其他选择吗?

此主题中人们在C ++中建议适当的结构,但我不知道.NET中有类似的东西。有人可以解释一下吗?

有帮助吗?

解决方案

试用 BackgroundWorker 。它支持进度更新和正在运行的任务的取消。

如果你想让一个线程等到另一个线程完成它的事情,那么Monitor.Wait和Monitor.Pulse都是好的,就像ManualResetEvent一样。但是,这些对于取消正在运行的任务并没有任何用处。

如果你想编写自己的取消代码,你可以在两个线程都可以访问的地方找到一个字段。将其标记为易失性,例如:

private volatile bool cancelling;

让主线程将其设置为true,并让工作线程定期检查它并在完成后将其设置为false。

这与具有“全局变量”并不具有可比性,因为您仍然可以将信号量变量的范围限制为对某个类是私有的。

其他提示

有点模糊(缺少时间),但请查看 ManualResetEvent和AutoResetEvent 。您也可能想要查找Monitor并锁定关键字。

查看Monitor.Wait和Monitor.Pulse。这是一篇关于.Net中线程的优秀文章(非常易读): http://www.albahari的.com /线程/ part4.aspx

一个简单的解决方案,比如同步的静态布尔值,应该是您所需要的,而不是基于框架的解决方案,因为您的方案可能会过度杀戮。如果你还想要一个框架,请查看 parallel想法的扩展。

这取决于您需要什么样的同步。 如果您希望能够在循环中运行线程,直到达到某种执行结束 - 您只需要一个静态bool变量。 如果您希望一个线程等到另一个线程到达执行点,您可能需要使用WaitEvents(AutoResetEvent或ManualResetEvent)。 如果你需要等待多个waitHandles,你可以使用WaitHandle.WaitAll或WaitHandle.WaitAny。

查看System.Runtime.Remoting命名空间。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top