AutoResetEvent 运用

static AutoResetEvent are = new AutoResetEvent(true);//初始化为开

static void Main(string[] args)
{
                  //如果这里加上这句 are.Reset(); 则会把初始化的开,改为关
for (int i = 0; i < 10; i++) { new Thread(() => { are.WaitOne();//发现为开,继续执行并设置为关 Thread.Sleep(1000); Console.WriteLine(DateTime.Now.ToString("mm:ss")); are.Set();//又重新设置为开

}).Start(); } }
static AutoResetEvent are = new AutoResetEvent(false);//初始化为关

static void Main(string[] args)
{
                  are.Set();//这里必须先设置为开,下面are.WaitOne()才能继续执行
                 
                  for (int i = 0; i < 10; i++)
                  {
                        new Thread(() =>
                        {

                              are.WaitOne();//发现为开,继续执行并设置为 ,如果 are 是 ManualResetEvent 的实例,则 不会 自动设置为 
                              Thread.Sleep(1000);
                              Console.WriteLine(DateTime.Now.ToString("mm:ss"));
                              are.Set();//又重新设置为开

}).Start(); } }
static AutoResetEvent are = new AutoResetEvent(false);
static void Main(string[] args)
{
                  for (int i = 0; i < 10; i++)
                  {
                     
                        new Thread(() =>
                        {
                        
                              are.WaitOne();

                              Thread.Sleep(1000);

                              Console.WriteLine(DateTime.Now.ToString("mm:ss"));


                        }).Start();

                  }
                  are.Set();// 只能执行一个线程输出,其它阻塞;如果 are 是 ManualResetEvent 的实例,则会全部输出,因为 WaitOne 它只等一个Set信号,它不会自动设置关;
 }