2013-07-04 28 views
9

如何将线程置于暂停/睡眠状态,直到我手动恢复它在C#中?暂停一个线程,直到手动恢复

目前我中止线程,但这不是我正在寻找的。线程应该休眠/暂停,直到它触发它唤醒。

+1

我从来没有这样做过,但我一起阻断的思路思考线程使用ManualResetEvent。 –

+0

@ByteBlast:它看起来像是重复的,但是对另一个问题的回答并不是特别好:/ – Ian

+0

确保只对后台线程执行此操作。 UI线程(任何已加入COM STA的线程,通常是主线程,并且通常是任何拥有窗口的线程)*必须*继续运行并泵送消息,否则将导致稳定性问题。 –

回答

18

您应该通过ManualResetEvent来做到这一点。

ManualResetEvent mre = new ManualResetEvent(); 
mre.WaitOne(); // This will wait 

在另一个线程上,显然你需要一个对ManualResetEvent实例的引用。

mre.Set(); // Tells the other thread to go again 

完整的例子,它将打印一些文本,等待另一个线程做一些事情,然后重新开始:

class Program 
{ 
    private static ManualResetEvent mre = new ManualResetEvent(false); 

    static void Main(string[] args) 
    { 
     Thread t = new Thread(new ThreadStart(SleepAndSet)); 
     t.Start(); 

     Console.WriteLine("Waiting"); 
     mre.WaitOne(); 
     Console.WriteLine("Resuming"); 
    } 

    public static void SleepAndSet() 
    { 
     Thread.Sleep(2000); 
     mre.Set(); 
    } 
} 
+0

谢谢你的帮助。对此,我真的非常感激! –

+0

@骑士:没问题,请记住接受答案,如果有帮助。 – Ian

+0

是的,抱歉,我忘了:) –