EventWaitHandle

Posted song2013

tags:

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

在查资料的过程中,我突然想到一个类:EventWaitHandle,也就是本文的主角。

  这个类通过在线程之间设置信号量,可以非常方便的控制线程运行的顺序。具体代码如下:

  首先全局申明:

 EventWaitHandle myHandle = new EventWaitHandle(false, EventResetMode.ManualReset);  //将信号状态置为非终止,使用手动重置

  其次在大数据处理的函数开始加上

 myHandle.Reset();//让其他需要等待的线程阻塞

  末尾加上:

myHandle.Set();  //允许其他等待的线程运行

  具体形式如下:

 private void DealDataInformation(ListView listview,string fileName,EnumX enums)
{
myHandle.Reset();//让其他需要等待的线程阻塞
    ....................
myHandle.Set(); //允许其他等待的线程运行
}

  其中Reset方法可以让本函数进行处理,而让其他在线程上的未接收到信号量的函数进入阻塞状态,而Set方法则是释放信号量,以便通知阻塞线程当前处理结束,可以继续进行。

  那么怎么控制哪些函数需要阻塞呢? 很简单:

  直接在函数的入口处加上:

private void ColorTheResultAsync(EnumX enums,ListView listview)
{
myHandle.WaitOne(); //处于等待状态,直到收到Set的信号
.........
}

 

以上是关于EventWaitHandle的主要内容,如果未能解决你的问题,请参考以下文章

EventWaitHandle

.net c#下的一个线程间同步问题,其中用到了eventwaithandle,代码如下

等到 EventWaitHandle.Set() 之后通知所有进程

我需要 Dispose() 或 Close() EventWaitHandle 吗?

EventWaitHandle 没有在进程终止时关闭

EventWaitHandle 第一课