C#关于控制线程的停止和继续

 

1、static EventWaitHandle eHandle = new EventWaitHandle(true, EventResetMode.ManualReset);

当前状态下调用 eHandle.WaitOne(),不会导致阻塞, 需要调用Reset()阻塞,Set()放行。
WaitOne()->Run->Reset()->Stop->Set()->Run

2、static EventWaitHandle eHandle = new EventWaitHandle(false, EventResetMode.ManualReset);

当前状态下调用 eHandle.WaitOne(),需要先Set()放行,不然门一直是关闭的
WaitOne()->Stop->Set()->Run

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

当前状态下第一次调用WaitOne(),并不会阻塞,true表示放行的状态,但是因为是自动模式,走过门之后会自动把门带上,第二次调用WaitOne(),会阻塞住,如果是手动模式,不去ReSet()的话,不管怎么调用WaitOne()都会放行。
WaitOne()->Run->WaitOne()->Stop->Set->Run

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

WaitOne()->Stop->Set()->Run

自动模式下,如果在放行状态,调用一次WaitOne()后都会自动关门阻塞。