AutoResetEvent 特点: AutoResetEvent 相当于一扇一次只能通过一个线程的门,并且线程通过了门以后,门会自动关上。 AutoResetEvent 的WaitOne方法好比是门前的排队号码发放机,线程按照各自调用WaitOne的先后顺序在门前排队阻塞等候门开。 AutoResetEvent 的Set方法被调用后,门会打开(注意:该门一次只能通过一个线程,并且线程通过了门以后,门会自动关上)。 AutoResetEvent 的初始状态的门是开还是关,由其实例化时所传布尔类型的参数决定:true是开门,false是关门。 例如: AutoResetEvent are = new AutoResetEvent(true);默认开门 AutoResetEvent are = new AutoResetEvent(false);默认关门 示例代码 AutoResetEvent are = new AutoResetEvent(false); private void AutoResetEvent_Test_Click(object sender, EventArgs e) { Thread t1 = new Thread(TestFunc); t1.Name = "t1"; t1.Start(); Thread t2 = new Thread(TestFunc); t2.Name = "t2"; t2.Start(); Thread t3 = new Thread(TestFunc); t3.Name = "t3"; t3.Start(); Thread.Sleep(1000); are.Set(); } private void TestFunc() { are.WaitOne(); Console.WriteLine(Thread.CurrentThread.Name); //are.Set(); //这行注释掉以后,输出结果只有一行,而不注释时输出结果是三行。 }