在C#中,ManualResetEvent
類用于同步多個線程,允許一個或多個線程等待,直到其他線程調(diào)用 Set
方法來重置事件。要設(shè)置 ManualResetEvent
的等待時間,你可以使用 WaitOne
、WaitMany
或 WaitAny
方法,并傳入一個表示超時時間的 TimeSpan
參數(shù)。
以下是一個簡單的示例,展示了如何使用 ManualResetEvent
設(shè)置等待時間:
using System;
using System.Threading;
class Program
{
static ManualResetEvent _event = new ManualResetEvent(false); // 初始化為非信號狀態(tài)
static void Main()
{
Thread thread1 = new Thread(DoWork);
Thread thread2 = new Thread(DoWork);
thread1.Start();
thread2.Start();
// 讓線程1在等待5秒后繼續(xù)執(zhí)行
_event.WaitOne(5000);
Console.WriteLine("Thread 1 continues.");
// 讓所有等待的線程繼續(xù)執(zhí)行
_event.Set();
thread1.Join();
thread2.Join();
}
static void DoWork()
{
Console.WriteLine("Thread waiting for event.");
_event.WaitOne(); // 等待事件被設(shè)置
Console.WriteLine("Event set, thread continues.");
}
}
在這個示例中,我們創(chuàng)建了兩個線程 thread1
和 thread2
,它們都調(diào)用 DoWork
方法。在 DoWork
方法中,線程調(diào)用 ManualResetEvent
的 WaitOne
方法并傳入一個5秒的超時時間。這意味著線程將等待最多5秒,然后繼續(xù)執(zhí)行。在主線程中,我們在5秒后調(diào)用 Set
方法來設(shè)置事件,允許所有等待的線程繼續(xù)執(zhí)行。