标签:
一、ManualResetEvent类
用来使线程处于等待状态。其中有两个常用的方法:
Set():将状态置为有信号。
RestSet():将状态置为无信号。
WaitOne:等待一个事件对象变成有信号。
[STAThread] public static void Main() { ManualResetEvent manRE; manRE = new ManualResetEvent(true);//初始状态为有信号 bool state = manRE.WaitOne(5000, true);//在有信号状态下,即使设置了等待时间,线程也不会在WaitOne方法内等待 Console.WriteLine("ManualResetEvent After First WaitOne -- " + state);//True //状态改为无信号 manRE.Reset(); state = manRE.WaitOne(5000, true);//无信号状态下,线程将等待指定时长 Console.WriteLine("ManualResetEvent After second WaitOne -- " + state);//False Console.ReadLine(); }
ManualResetEvent类还有WaitAny、WaitAll,用法从字面意思就能推断出。
二、AutoResetEnvet类
用法与ManualResetEvent类类似,唯一的区别是在WaitOne方法中。执行完WaitOne方法后,信号状态自动变换。
如果将上例中的例子用AutoResetEnvet实现一下,如下:
1 public static void Main() 2 { 3 AutoResetEvent aRE; 4 aRE = new AutoResetEvent(true); //初始为终止状态 5 Console.WriteLine("Before First WaitOne"); 6 bool state = aRE.WaitOne(5000, true);//不等待(因为初始状态为终止状态),之后信号自动变为false。 7 Console.WriteLine("After First WaitOne -- " + state); 8 //状态改为无信号 9 //aRE.Reset();//不再需要手动更改信号状态。 10 state = aRE.WaitOne(5000, true); 11 Console.WriteLine("After second WaitOne -- " + state); 12 Console.ReadLine(); 13 }
三、Mutex类
标签:
原文地址:http://www.cnblogs.com/hzz521/p/4657201.html