线程暂停和恢复c#

我有几个post,我怎么能暂停/恢复它们?


从重复的问题:

我如何暂停5个线程,并记住它们的状态。 因为其中一个正在吃另一个正在思考等等

如果您正在使用System.Threading.Thread ,则可以调用Suspend and Resume 。 但不建议这样做。 当你调用Suspend时,没有人知道线程可能在做什么。 例如,如果在线程持有锁定时调用Suspend ,或者打开一个文件以进行独占访问,则其他任何内容都无法访问锁定的资源。

正如Thread.Suspend的文档所说:

不要使用Suspend和Resume方法来同步线程的活动。 暂停它时,您无法知道线程正在执行的代码。 如果在安全权限评估期间挂起线程时挂起线程,则可能会阻止AppDomain中的其他线程。 如果在执行类构造函数时挂起线程,则会阻止AppDomain中尝试使用该类的其他线程。 死锁很容易发生。

通常,您使用事件等同步原语来控制线程的活动。 线程将等待事件(查看AutoResetEventManualResetEvent )。 或者,如果线程正在为队列提供服务,您将使用类似BlockingCollection东西,以便线程可以等待将某些内容放入队列。 所有这些非繁忙等待技术都比任意暂停和重新启动线程要好得多,并且不会遭受潜在的灾难性后果。

在第一个实例中看一下Monitor.Wait和Monitor.Pulse- Marc Gravell 在这里有一个很好的例子 。

您很可能想要考虑使用Producer / Consumer队列。

您必须使用同步技术

MSDN线程同步

在主线程中:

 ManualResetEvent re = new ManualResetEvent(true); 

在所有线程中,在“战略”点:

 re.WaitOne(); 

在主线程中,要停止线程:

 re.Reset(); 

并重新启动:

 re.Set(); 

您可以使用Suspend()Resume()
http://msdn.microsoft.com/en-us/library/system.threading.thread.resume.aspx
http://msdn.microsoft.com/en-us/library/system.threading.thread.suspend.aspx
你也可以阅读:
什么是暂停和恢复线程的替代方法?