C#中的AutoResetEvent
是一個同步原語,它允許一個或多個線程等待,直到另一個線程設置事件。AutoResetEvent
有兩種狀態:Set
和Reset
。當事件被設置為Set
狀態時,等待的線程會被釋放;當事件被重置為Reset
狀態時,其他等待的線程會再次被阻塞。
下面是如何使用AutoResetEvent
的一些示例:
AutoResetEvent
實例:AutoResetEvent autoResetEvent = new AutoResetEvent(false);
參數false
表示事件初始狀態為Reset
。
WaitOne
方法:autoResetEvent.WaitOne(); // 當前線程將阻塞,直到事件被設置為Set狀態
Set
方法:autoResetEvent.Set(); // 將事件設置為Set狀態,等待的線程將被釋放
Reset
方法:autoResetEvent.Reset(); // 將事件重置為Reset狀態,其他等待的線程將被阻塞
下面是一個完整的示例:
using System;
using System.Threading;
class Program
{
static AutoResetEvent autoResetEvent = new AutoResetEvent(false);
static void Main()
{
Thread workerThread = new Thread(WorkerMethod);
workerThread.Start();
Console.WriteLine("按任意鍵繼續...");
Console.ReadKey();
autoResetEvent.Set(); // 設置事件,喚醒等待的線程
Console.WriteLine("事件已設置,按任意鍵退出...");
Console.ReadKey();
}
static void WorkerMethod()
{
autoResetEvent.WaitOne(); // 等待事件被設置為Set狀態
Console.WriteLine("工作線程開始執行...");
}
}
在這個示例中,主線程在啟動工作線程之前會等待用戶按下任意鍵。當用戶按下任意鍵后,主線程會設置AutoResetEvent
,從而喚醒等待的工作線程。