在C#中,WaitOne
方法是ManualResetEvent
、AutoResetEvent
或CountdownEvent
类的一个成员。要设置超时,您可以使用WaitOne
方法的第二个参数,该参数是一个表示等待时间的TimeSpan
对象。如果在这个时间内事件没有发生,WaitOne
方法将返回false
。
以下是一个使用ManualResetEvent
的示例,演示了如何设置超时:
using System; using System.Threading; class Program { static ManualResetEvent _event = new ManualResetEvent(false); static void Main() { Thread t1 = new Thread(() => { Console.WriteLine("Thread 1 is waiting for the event."); bool result = _event.WaitOne(5000); // 设置超时为5秒 if (result) { Console.WriteLine("Event has occurred."); } else { Console.WriteLine("Event did not occur within the timeout period."); } }); Thread.Sleep(2000); // 让线程1等待2秒,以便在线程2触发事件之前启动 Console.WriteLine("Thread 2 is signaling the event."); _event.Set(); // 触发事件 t1.Join(); } }
在这个示例中,我们创建了一个ManualResetEvent
实例,并设置了一个5秒的超时。然后我们创建了一个线程,该线程等待事件发生。在线程2触发事件之前,线程1会等待2秒。最后,我们输出相应的消息。