我有几个帖子,我怎么能暂停/恢复它们?
来自重复的问题:
如何暂停5个帖子,并记住他们的状态。因为其中一个正在吃另一个正在思考等等。
答案 0 :(得分:15)
如果您使用System.Threading.Thread
,则可以拨打Suspend
和Resume
。但不建议这样做。当你致电Suspend
时,没有人知道线程可能在做什么。例如,如果您在线程持有锁定时调用Suspend
,或者打开一个文件进行独占访问,则其他任何内容都无法访问锁定的资源。
正如Thread.Suspend的文档所说:
不要使用暂停和恢复 同步活动的方法 线程。你无从知晓 线程正在执行什么代码 你暂停它。如果你暂停了 线程,而它持有锁定期间 安全许可评估,其他 AppDomain中的线程可能是 受阻。如果你暂停一个线程 它正在执行一个类构造函数, AppDomain中的其他线程 尝试使用该类被阻止。 死锁很容易发生。
通常,您使用事件等同步原语来控制线程的活动。线程将等待事件(查看AutoResetEvent
和ManualResetEvent
)。或者,如果一个线程正在为一个队列提供服务,你将使用类似BlockingCollection
的东西,这样线程就可以等待某些东西被放入队列。所有这些非繁忙的等待技术都比任意暂停和重新启动线程要好得多,并且不会遭受潜在的灾难性后果。
答案 1 :(得分:2)
您必须使用同步技术
答案 2 :(得分:2)
首先看一下Monitor.Wait和Monitor.Pulse - Marc Gravell有一个nice example used in a queue here。
很可能你想考虑使用Producer/Consumer队列。
答案 3 :(得分:1)
在主线程中:
ManualResetEvent re = new ManualResetEvent(true);
在所有主题中,在“战略”点:
re.WaitOne();
在主线程中,停止线程:
re.Reset();
并重启:
re.Set();
答案 4 :(得分:0)