个人随笔
技术改变世界

C# AutoResetEvent 的使用方法

在合适的场景下可以代替timer、多线程互斥 的时候使用AutoResetEvent ,效果会得到非常不错的改善。

至少代码是非常清晰的。

AutoResetEvent 主要是用于对代码执行的阻塞 和 通知阻塞完成

AutoResetEvent 的 WaitOne() 方法则是等待信号通知

AutoResetEvent 的 Set() 方法则是通知WatOne() 停止阻塞,跟 放行通过 一个意思,就是让代码可以继续执行。

然后介绍下 AutoResetEvent 的构造函数的bool值,  这个值就是初始状态的时候,也就是第一次运行AutoResetEvent.WaitOne() 的时候是否可以通过。 (false为阻塞,true为通过) , 跟 do while 的语法意思一样。

下面是代码:

    class Program
    {
        //声明AutoResetEvent变量
        //如果参数为true的,则初始值第一次WaitOne是直接通过的,不会阻塞。 如果是false的话,直接阻塞直到得到Set()信号通知
        static AutoResetEvent autoReset = new AutoResetEvent(false);

        //程序入口方法
        static void Main(string[] args)
        {
            //创建线程
            Thread th = new Thread(new ThreadStart(MyMethod));
            th.Start();


            //发送阻塞完成信号,让线程中的代码开始执行
            for (int i = 0; i < 10; i++)
            {
                Console.WriteLine("主线程代码..");
                autoReset.Set();    //发送信号,通知阻塞完成
                Thread.Sleep(1000);
            }
        }

        //线程执行方法
        static void MyMethod()
        {
            while(true)
            {
                autoReset.WaitOne();    //阻塞,直到调用了 autoReset.Set(); 进行通知。
                Console.WriteLine("WaitOne阻塞完成了");
            }
        }
    }

 

运行效果:

AutoResetEvent

转载请注明出处王旭博客 » C# AutoResetEvent 的使用方法

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址