Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 暂停线程直到手动恢复_C#_.net_Multithreading_Visual Studio 2010 - Fatal编程技术网

C# 暂停线程直到手动恢复

C# 暂停线程直到手动恢复,c#,.net,multithreading,visual-studio-2010,C#,.net,Multithreading,Visual Studio 2010,如何将线程置于暂停/睡眠状态,直到在c#中手动恢复它 目前我正在中止线程,但这不是我要找的。线程应该休眠/暂停,直到有东西触发它醒来。查看或。您应该通过 在另一个线程上,显然需要引用ManualResetEvent实例 mre.Set(); // Tells the other thread to go again 完整示例将打印一些文本,等待另一个线程执行某些操作,然后继续: class Program { private static ManualResetEvent mre =

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

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

查看或。

您应该通过

在另一个线程上,显然需要引用
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();
    }
}

我以前从未这样做过,但我正在考虑使用ManualResetEvent阻塞线程。@ByteBlast:它看起来确实像是重复的,但是另一个问题的答案不是特别好:/确保只对后台线程执行此操作。UI线程(任何已加入COM STA的线程,通常是主线程,通常是任何因任何原因拥有窗口的线程)必须继续运行并发送消息,否则将导致稳定性问题。感谢您的帮助。我真的很感激@奈特:没问题,如果有帮助,请记住接受答案。是的,对不起,我忘了:)谢谢你的回复。我真的很感激
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();
    }
}