全国服务热线:

15861139266

C#多线程启动停止暂停继续(下)_苏州上位机培训_苏州工业机器人培训
发布时间:2024-03-05 16:25:16 点击次数:1200

多线程的暂停继续

多线程的暂停继续,.NET为我们提供了另外一个对象——ManualResetEvent,这个对象会有一个值,这个值是布尔类型,就像一个门闸一样,True是打开门闸,False是关闭门闸,所以想要暂停多线程就调用这个对象的Reset方法,想要继续多线程就调用这个对象的Set方法,使用非常简单。


首先我们创建一下这个对象,可以通过构造方法,给这个对象赋初始值,我这里为True,这样就能直接运行,不会阻塞。


        /// <summary>

        /// 线程暂停控制,默认开启

        /// </summary>

        private ManualResetEvent manual = new ManualResetEvent(true);

但是如果希望这个对象与多线程有所联系,必须要在多线程的方法里体现这个对象的作用,这个是调用这个对象的WaitOne方法,表示在调用的地方阻塞住,通过判断True或者False来决定是否继续执行,就像大家开车过高速收费站一样,即使现在普遍采用ETC了,在入口也需要减速,有一个ETC识别的过程,识别成功才会抬杆,识别识别,杆子是不会自动抬起的,这个是一样的道理。


所以线程执行代码如下:


        /// <summary>

        /// 多线程执行方法

        /// </summary>

        private void TaskMethod()

        {

            while (!cts.IsCancellationRequested)

            {

                manual.WaitOne();


                CurrentValue++;


                if (CurrentValue == 200)

                {

                   CurrentValue = 0;

                }

                Thread.Sleep(100);

            }

        }

对比一下,其实就是加了一个manual.WaitOne()。


线程暂停代码:


        private void btn_Pause_Click(object sender, EventArgs e)

        {

            manual.Reset();

        }       

线程继续代码:


        private void btn_Continue_Click(object sender, EventArgs e)

        {

            manual.Set();

        }

AutoResetEvent

AutoResetEvent和ManualResetEvent的用法非常相似,区别在于一个是手动,一个是自动,AutoResetEvent会在置位之后自动复位,这样体现在多线程里,就是会只执行一次,就像大家进小区一样,如果有10辆车在排队,这时候如果自动模式,每次只能进一辆车,如果是手动模式,可以由保安控制门闸打开,等10辆车都进去之后,再由保安将门闸关注。



立即咨询
  • 品质服务

    服务贴心周到

  • 快速响应

    全天24小时随时沟通

  • 专业服务

    授权率高,保密性强

  • 完善售后服务

    快速响应需求,及时性服务

直播课程
软件开发基础课程
上位机软件开发课
机器视觉软件开发课
专题课
联系方式
电话:15861139266
邮箱:75607802@qq.com
地址:苏州吴中区木渎镇尧峰路69号
关注我们

版权所有:大林机器视觉培训苏州办事处所有 备案号:苏ICP备14016686号-6

技术支持: 新易维软件