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的更多相关文章
- c#多线程同步之EventWaitHandle的应用
最近在研究前辈写的winform代码,其中有一个功能,前辈用了EventWaitHandle.初读代码,有点不理解,慢慢想来,还是可以理解的.这个功能,就是执行某项比较耗时的任务,需要打开旋转图标,等 ...
- c#多线程同步之EventWaitHandle再次使用
/// <summary> /// 文件传输器,用来获取全文文件,自动根据全文文件数量,开启一定数量的线程,采用生产者消费模式 /// </summary> public cl ...
- c#多线程同步之EventWaitHandle使用
有这么一个场景,我需要借助windows剪贴板把数据插入到word域中. 实现步骤: 1.把剪贴板数据保存到变量. 2.使用剪贴板实现我们的业务. 3.把变量里的数据存回剪贴板. 但是结果却令人诧异, ...
- C#线程同步(4)- 通知&EventWaitHandle一家
文章原始出处 http://xxinside.blogbus.com/logs/47523285.html 预备知识:C#线程同步(1)- 临界区&Lock,C#线程同步(2)- 临界区&am ...
- 【深度好文】多线程之WaitHandle-->派生EventWaitHandle事件构造-》AutoResetEvent、ManualResetEvent
AutoResetEvent/ManualResetEvent 都是继承自 EventWaitHandle ,EventWaitHandle继承自WaitHandle. 在讨论这个问题之前,我们先了解 ...
- .NET 同步与异步 之 EventWaitHandle(Event通知) (十三)
本随笔续接:.NET 同步与异步 之 Mutex (十二) 在前一篇我们已经提到过Mutex和本篇的主角们直接或间接继承自 WaitHandle: Mutex类,这个我们在上一篇已经讲过. Event ...
- ManualResetEvent(ManualResetEvent : EventWaitHandle : WaitHandle)的三个方法
ManualResetEvent mre= new ManualResetEvent(false);(ManualResetEvent : EventWaitHandle : WaitHandle) ...
- 多线程EventWaitHandle -戈多编程
在.NET的System.Threading命名空间中有一个名叫WaitHandler的类,这是一个抽象类(abstract),我们无法手动去创建它,但是WaitHandler有三个子类,这三个子类分 ...
- EventWaitHandle 第一课
本篇通过一个列子使用EventWaitHandle实现两个线程的同步.请参看下面的列子. using System; using System.Collections.Generic; using S ...
随机推荐
- Ubuntu18.04上使用LLDB调试Chromium Android C++代码。
###动机###Chromium Android源代码庞大且复杂.在调试器LLDB下能帮助我们更好的理解代码流程.介绍使用LLDB调试器调试android上chromium的C++代码. [1] 编译 ...
- js003-4方向8方向函数
1,求四方向或者8方向的周围的棋子. /** * pos 1-4, 1-8 4/8方向的周围 * @param {*} pos * @param {*} dir */ var _nearChess = ...
- 紫书 习题 10-32 UVa 1414 ( 迷之规律)
看了其他人博客,貌似i个盘子的方案数满足 f[i] = f[i-1] * x + y ??????? 神来之笔 貌似没有找到严格的证明-- 牛逼-- 如果这样的话暴力求出x和y然后递推完事 #incl ...
- UVALive 6869 Repeated Substrings
Repeated Substrings Time Limit: 3000MS Memory Limit: Unknown 64bit IO Format: %lld & %llu Descri ...
- SQL解析器的性能測试
对同一个sql语句,使用3种解析器解析出ast语法树(这是编译原理上的说法,在sql解析式可能就是解析器自己定义的statement类型).运行100万次的时间对照. package demo.tes ...
- PHP开发常规安全问题总结
文章来源:PHP开发学习门户 地址:http://www.phpthinking.com/archives/575 php给了开发人员极大的灵活性,可是这也为安全问题带来了潜在的隐患,最近须要总结一下 ...
- vim 帮助文档汉化
我们在使用vim 的时候,经常会碰到一些陌生的命令,这时候我们可以通过 :help *** 来查询一些命令的使用方法.不过呢,我们安装的vim默认的都是英文的,看起来很费劲,尤其是向我这样英语比较差的 ...
- 网站平台的favicon.ico的logo
<link rel="shortcut icon" href="http://www.uuop.com/icotemp/2017061703035984/f ...
- java种instanceof方法和getclass方法的区别
在比较一个类是否和另一个类属于同一个类实例的时候,我们通常可以采用instanceof和getClass两种方法通过两者是否相等来判断,但是两者在判断上面是有差别的,下面写个测试类. public c ...
- LuoguP1251 餐巾计划问题(费用流)
题目描述 一个餐厅在相继的 NN 天里,每天需用的餐巾数不尽相同.假设第 ii 天需要 r_iri块餐巾( i=1,2,...,N).餐厅可以购买新的餐巾,每块餐巾的费用为 pp 分;或者把旧餐巾送 ...