恢复C#线程

3 .net c# resume multithreading suspend

可能重复的问题: 有没有办法无限期地暂停一个线程?


在我的代码中,我执行以下操作

Thread mainThread
//...
mainThread.Resume();

void StartThread()
{
    while (!wantQuit)
    {
        db.runEmail();
        mainThread.Suspend();
    }
}
Run Code Online (Sandbox Code Playgroud)

然后我得到下面的例外,因为我没有暂停时调用简历.

System.Threading.ThreadStateException
Run Code Online (Sandbox Code Playgroud)

我注意到这个警告

warning CS0618: 'System.Threading.Thread.Resume()' is obsolete: 'Thread.Resume has been deprecated.  Please use other classes in System.Threading, such as Monitor, Mutex, Event, and Semaphore, to synchronize Threads or protect resources.  http://go.microsoft.com/fwlink/?linkid=14202'
Run Code Online (Sandbox Code Playgroud)

所以我想知道有没有办法恢复和忽略它没有被暂停的异常/情况?我讨厌写下面而不只是一行

        try
        {
            mainThread.Resume();
        }
        catch (System.Threading.ThreadStateException e)
        {
        }
Run Code Online (Sandbox Code Playgroud)

Hen*_*man 7

简单的解决方案是修复逻辑,不要在没有Suspended()时调用Resume().

但Resume/Suspend API确实已被弃用,请看一下,例如:

1)监控,等待()和脉冲()

2)AutoResetEvent或ManualResetEvent,Set()和WaitOne()

静态类Monitor更容易使用和集成lock() {},但ResetEvent在这里可能更合适,因为您可以在设置或未设置模式下创建它,并且您不太可能"错过"信号.相比之下,当稍后发生Wait()时,Monitor.Pulse()将丢失.


会在你的问题中插入一个链接,虽然我不认为它是重复的,但是接受的答案很适合用来阻止你使用Suspend/Resume.