当前位置:  开发笔记 > 编程语言 > 正文

什么是暂停和恢复线程的替代方法?

如何解决《什么是暂停和恢复线程的替代方法?》经验,为你挑选了2个好方法。

这两种方法Thread.Suspend()Thread.Resume()是因为.NET 2.0过时.为什么?什么是其他替代品和任何例子?



1> Darcy Cassel..:

您将要使用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只允许一个线程"恢复".


这解决了典型的挂起/恢复情况,并避免了过时的警告.

2> Daniel Earwi..:

好的选择都可以通过线程达到令人高兴等待的程度.暂停是危险的,因为它可以在线程锁定互斥锁时挂起线程 - 这是一个死锁的秘诀.

所以你的线程需要的是一个可以等待的ManualResetEvent - 当它没有持有任何锁时,它可以安全地执行.

推荐阅读
低调pasta_730
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有