多线程中 ManualResetEvent 的用法

Posted wgx0428

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了多线程中 ManualResetEvent 的用法相关的知识,希望对你有一定的参考价值。

        /// <summary>
        /// 手动重启
        /// </summary>
        private ManualResetEvent manualReset = new ManualResetEvent(false);
                if (suspend)
                {
                    manualReset.WaitOne();//暂停发送
                }
            SuspendCommand = new RelayCommand(o => { suspend = true; manualReset.Reset(); });
            RestoreCommand = new RelayCommand(o=> { suspend = false; manualReset.Set(); });

它可以通知一个或多个正在等待的线程已发生事件,允许线程通过发信号互相通信,来控制线程是否可心访问资源

 

 在多线程开发中,时常用到 ManualResetEvent 与 AutoResetEvent  。 它们如同道路交通中的信号灯。两者之间有什么区别呢?

共同点:

           均继承 EventWaitHandle 接口,因此,均具有以下功能:

           Reset() //红灯

           Set() //绿灯

           WaitOne() // 等待信号

 

不同点:

            AutoResetEvent   收到 Set 后 , 一次只能执行一个线程,其它线程继续 WaitOne 。

           ManualResetEvent  收到 Set 后,所有处理 WaitOne 状态线程均继续执行。

参考文章:https://www.cnblogs.com/howtrace/p/11362284.html  https://www.cnblogs.com/li-peng/p/3291306.html

以上是关于多线程中 ManualResetEvent 的用法的主要内容,如果未能解决你的问题,请参考以下文章

AutoResetEvent和ManualResetEvent(多线程操作)

多线程ManualResetEvent等待所有线程

AutoResetEvent 和 ManualResetEvent 多线程应用

C#多线程:深入了解线程同步lock,Monitor,Mutex,同步事件和等待句柄(中)

利用ManualResetEvent来来控制异步调用的打印的线程的暂停和恢复(转)

AutoResetEvent和ManualResetEvent理解 z