在C#中,可以使用ManualResetEvent類來實現線程間的同步和通信。下面是一個簡單的示例代碼,演示如何在C#中使用ManualResetEvent:
using System;
using System.Threading;
class Program
{
static ManualResetEvent manualResetEvent = new ManualResetEvent(false);
static void Main(string[] args)
{
Thread thread1 = new Thread(() =>
{
Console.WriteLine("Thread 1 is waiting...");
manualResetEvent.WaitOne();
Console.WriteLine("Thread 1 is now running.");
});
Thread thread2 = new Thread(() =>
{
Console.WriteLine("Thread 2 is waiting...");
manualResetEvent.WaitOne();
Console.WriteLine("Thread 2 is now running.");
});
thread1.Start();
thread2.Start();
Thread.Sleep(2000); // 等待2秒鐘
manualResetEvent.Set(); // 發信號,讓等待的線程繼續執行
thread1.Join();
thread2.Join();
}
}
在上面的示例代碼中,我們創建了一個ManualResetEvent實例并初始化為false。然后創建了兩個線程(thread1和thread2),它們都在等待ManualResetEvent對象的信號。在主線程中等待2秒鐘后,調用Set方法發送信號,讓等待的線程繼續執行。
需要注意的是,ManualResetEvent對象在調用Set方法后會一直保持信號狀態,直到調用Reset方法將其重新設置為非信號狀態。