在C#中,AutoResetEvent
是一個同步原語,它允許一個或多個線程等待,直到另一個線程發出信號。當AutoResetEvent
的計數器從0變為非0時,等待的線程會被釋放。
要使用AutoResetEvent
,你需要執行以下步驟:
AutoResetEvent
實例。WaitOne()
方法讓當前線程等待,直到AutoResetEvent
被發出信號。Set()
方法發出信號,喚醒等待的線程。Reset()
方法將計數器重置為0,阻止其他線程被喚醒。下面是一個簡單的示例:
using System;
using System.Threading;
class Program
{
static AutoResetEvent autoResetEvent = new AutoResetEvent(false); // 初始計數為0
static void Main()
{
Thread t1 = new Thread(ThreadMethod1);
Thread t2 = new Thread(ThreadMethod2);
t1.Start();
t2.Start();
t1.Join();
t2.Join();
}
static void ThreadMethod1()
{
Console.WriteLine("Thread 1: Waiting for AutoResetEvent...");
autoResetEvent.WaitOne(); // 等待信號
Console.WriteLine("Thread 1: Signal received.");
}
static void ThreadMethod2()
{
Thread.Sleep(1000); // 讓線程休眠1秒,以便觀察等待效果
Console.WriteLine("Thread 2: Signaling AutoResetEvent...");
autoResetEvent.Set(); // 發出信號
}
}
在這個示例中,我們創建了兩個線程t1
和t2
。ThreadMethod1
會等待AutoResetEvent
的信號,而ThreadMethod2
會在休眠1秒后發出信號。當ThreadMethod2
發出信號后,ThreadMethod1
會繼續執行。