摘自:http://www.cnblogs.com/willick/p/4177977.html 仅供参考学习
有时候你需要一个线程在接收到某个信号时,才开始执行,否则处于等待状态,这是一种基于信号的事件机制。.NET框架提供一个ManualResetEvent类来处理这类事件,它的 WaiOne 实例方法可使当前线程一直处于等待状态,直到接收到某个信号。它的Set方法用于打开发送信号。下面是一个信号机制的使用示例:
1 //线程的信号机制 2 #region 3 var signal = new ManualResetEvent(false); 4 DateTime beginTime = DateTime.Now; 5 new Thread(() => { 6 Console.WriteLine("waiting for signal..."); 7 signal.WaitOne(); 8 signal.Dispose(); 9 Console.WriteLine("Got signal"); 10 }).Start(); 11 Thread.Sleep(2000); 12 TimeSpan ts = (DateTime.Now - beginTime); 13 Console.WriteLine("已消耗啦"+ts.TotalMilliseconds); 14 signal.Set(); 15 16 Console.ReadKey(); 17 #endregion
效果:
1 waiting for signal... 2 已消耗啦2003.1145 3 Got signal
当执行Set方法后,信号保持打开状态,可通过Reset方法将其关闭,若不再需要,通过Dispose将其释放。如果预期的等待时间很短,可以用ManualResetEventSlim代替ManualResetEvent,前者在等待时间较短时性能更好。信号机制非常有用,后面的日志案例会用到它。
未完待续。。。
时间: 2024-10-28 21:01:13