C#多线程编程里的暂停和继续

     在一些多线程程序里,有些线程需要中途暂停。

    一般我用一个布尔变量的判定来让一个循环执行空转或运行计算某些东西来达到中途暂停效果。

 

   System.Threading命名空间下有个EventWaitHandle的类,能实现暂停继续的效果。

   

   static EventWaitHandle eHandle=new EventWaitHandle(true, EventResetMode.AutoReset);

     第一个参数 true 代表 eHandle处于终止状态 false则为非终止状态

    第二个参数是一个枚举类型EventResetMode   AutoReset是自动模式 ManualReset是手动模式


   怎么用呢?  在自动模式下

   程序:

  static EventWaitHandle eHandle=new EventWaitHandle(true, EventResetMode.AutoReset);

   xxx;                           执行

   eHandle.WaitOne();       通过

   xxx;                            执行

    eHandle.WaitOne();      暂停

   xxx;                           

     


 static EventWaitHandle eHandle=new EventWaitHandle(false, EventResetMode.AutoReset);

   xxx;                           执行

   eHandle.WaitOne();       暂停

   xxx;                           

  

   第一个参数区别初始状态  true在终止状态下   遇到第一个WaitOne会直接通过,然后变为非终止状态,通过不了第二个,暂停在那里。

                                    false为初始在非终止状态,遇到WaitOne,通过不了,直接暂停。

          AutoReset模式就是没遇到一个WaitOne会自动切回非终止状态。

          而ManulReset模式是不会自动切换状态的。


    如何改变eHandle的状态呢?

     eHandle.Set();  切到终止状态

     eHandle.Reset(); 切到非终止状态


      eHandle就是一扇门,你定义它初始是开的还是关的, true是开的,false是关的。  还有它会不会自动关门,AutoReset自动、 ManuelReset非自动

       遇到每个WaitOne()判别下,门开的就过,不开就等。    如果自动门是开的,一个WaitOne过去后,门自动关上。   手动门就一直开着。

        我们自己通过Set()、Reset()控制门开关。 

      

   

   


   

       


   

  • 6
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值