你的位置:首页 > ASP.net教程

[ASP.net教程]线程的信号机制


摘自: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.11453 Got signal

当执行Set方法后,信号保持打开状态,可通过Reset方法将其关闭,若不再需要,通过Dispose将其释放。如果预期的等待时间很短,可以用ManualResetEventSlim代替ManualResetEvent,前者在等待时间较短时性能更好。信号机制非常有用,后面的日志案例会用到它。

 

未完待续。。。