在多線程中使用ResetEvent時,可以通過以下步驟來實現:
創建一個ResetEvent對象:可以使用System.Threading命名空間下的ManualResetEvent或AutoResetEvent類來創建ResetEvent對象。
在需要同步的地方,調用ResetEvent的WaitOne方法來等待信號。這將會阻塞當前線程,直到ResetEvent收到信號。
在另一個線程中,調用ResetEvent的Set方法來發送信號。這將會喚醒等待中的線程。
如果使用的是ManualResetEvent對象,可以在所有需要等待的線程都被喚醒后,調用ResetEvent的Reset方法重置信號,以便下一次使用。
示例代碼如下:
using System;
using System.Threading;
class Program
{
static ManualResetEvent resetEvent = new ManualResetEvent(false);
static void Main()
{
Thread t1 = new Thread(Worker);
t1.Start();
Thread t2 = new Thread(Sender);
t2.Start();
t1.Join();
t2.Join();
}
static void Worker()
{
Console.WriteLine("Worker thread is waiting for signal...");
resetEvent.WaitOne();
Console.WriteLine("Worker thread received signal and continued.");
}
static void Sender()
{
Thread.Sleep(2000);
Console.WriteLine("Sender thread is sending signal...");
resetEvent.Set();
}
}
在上面的示例中,Worker線程在調用resetEvent.WaitOne()時被阻塞,直到Sender線程調用resetEvent.Set()發送信號。這時Worker線程收到信號并繼續執行。