这两种方法Thread.Suspend()
和Thread.Resume()
是因为.NET 2.0过时.为什么?什么是其他替代品和任何例子?
您将要使用AutoResetEvent EventWaitHandle.
假设你想做这样的事情(注意:不要这样做!):
private Thread myThread; private void WorkerThread() { myThread = Thread.CurrentThread; while (true) { myThread.Suspend(); //Do work. } } public void StartWorking() { myThread.Resume(); }
像其他人所说,这是一个坏主意.尽管只在自己的线程上使用Suspend是相对安全的,但是当线程实际被挂起时,你永远无法弄清楚你是否正在调用Resume.所以Suspend and Resume已经过时了.
相反,您想要使用AutoResetEvent:
private EventWaitHandle wh = new AutoResetEvent(); private void WorkerThread() { while(true) { wh.WaitOne(); //Do work. } } public void StartWorking() { wh.Set(); }
工作线程将等待等待句柄,直到另一个线程调用StartWorking.它与Suspend/Resume的工作原理大致相同,因为AutoResetEvent只允许一个线程"恢复".
好的选择都可以通过线程达到令人高兴等待的程度.暂停是危险的,因为它可以在线程锁定互斥锁时挂起线程 - 这是一个死锁的秘诀.
所以你的线程需要的是一个可以等待的ManualResetEvent - 当它没有持有任何锁时,它可以安全地执行.