在查资料的过程中,我突然想到一个类: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的更多相关文章

  1. c#多线程同步之EventWaitHandle的应用

    最近在研究前辈写的winform代码,其中有一个功能,前辈用了EventWaitHandle.初读代码,有点不理解,慢慢想来,还是可以理解的.这个功能,就是执行某项比较耗时的任务,需要打开旋转图标,等 ...

  2. c#多线程同步之EventWaitHandle再次使用

    /// <summary> /// 文件传输器,用来获取全文文件,自动根据全文文件数量,开启一定数量的线程,采用生产者消费模式 /// </summary> public cl ...

  3. c#多线程同步之EventWaitHandle使用

    有这么一个场景,我需要借助windows剪贴板把数据插入到word域中. 实现步骤: 1.把剪贴板数据保存到变量. 2.使用剪贴板实现我们的业务. 3.把变量里的数据存回剪贴板. 但是结果却令人诧异, ...

  4. C#线程同步(4)- 通知&EventWaitHandle一家

    文章原始出处 http://xxinside.blogbus.com/logs/47523285.html 预备知识:C#线程同步(1)- 临界区&Lock,C#线程同步(2)- 临界区&am ...

  5. 【深度好文】多线程之WaitHandle-->派生EventWaitHandle事件构造-》AutoResetEvent、ManualResetEvent

    AutoResetEvent/ManualResetEvent 都是继承自 EventWaitHandle ,EventWaitHandle继承自WaitHandle. 在讨论这个问题之前,我们先了解 ...

  6. .NET 同步与异步 之 EventWaitHandle(Event通知) (十三)

    本随笔续接:.NET 同步与异步 之 Mutex (十二) 在前一篇我们已经提到过Mutex和本篇的主角们直接或间接继承自 WaitHandle: Mutex类,这个我们在上一篇已经讲过. Event ...

  7. ManualResetEvent(ManualResetEvent : EventWaitHandle : WaitHandle)的三个方法

    ManualResetEvent mre= new ManualResetEvent(false);(ManualResetEvent : EventWaitHandle : WaitHandle) ...

  8. 多线程EventWaitHandle -戈多编程

    在.NET的System.Threading命名空间中有一个名叫WaitHandler的类,这是一个抽象类(abstract),我们无法手动去创建它,但是WaitHandler有三个子类,这三个子类分 ...

  9. EventWaitHandle 第一课

    本篇通过一个列子使用EventWaitHandle实现两个线程的同步.请参看下面的列子. using System; using System.Collections.Generic; using S ...

随机推荐

  1. 在使用FireFox浏览器时,经常打开新标签,页面总是不断自动刷新,解决办法

    可以用如下方法尝试(逐个尝试,看看哪个管用): 1.地址栏输入 about:support,右上角有个翻新Firefox,点击,等待浏览器重启,即可. 2.点击:工具-附加组件,把“火狐主页和标签管理 ...

  2. 昼猫笔记 从此告别复杂代码--JavaScript

    昼猫笔记--给你带来不一样的笔记 不止是笔记 更多的是思考 大家好,我是一只来自喵星的前端初学者,由于我们喵星人科技较为落后,昼猫从今天开始带着使命来到地球学习前端知识. 从今天开始,猫猫我就从Jav ...

  3. 分享《Python 游戏编程快速上手(第3版)》高清中文版PDF+高清英文版PDF+源代码

    通过编写一个个小巧.有趣的游戏来学习Python,通过实例来解释编程的原理的方式.14个游戏程序和示例,介绍了Python基础知识.数据类型.函数.流程控制.程序调试.流程图设计.字符串操作.列表和字 ...

  4. Dcloud+mui 压缩上传图片到服务器

    chooseImgFromAlbums选择图片 chooseImgFromPictures 拍照 changeToLocalUrl 转换成可用的路径 uploadpic.compressImg 压缩图 ...

  5. 【Henu ACM Round#17 B】USB Flash Drives

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 排序,逆序.贪心选较大的就好. [代码] #include <bits/stdc++.h> #define ll lon ...

  6. 学一下gconv, gprof等知识

    scons.gcc.gdb.valgrind.gcov SCons 是一个用 Python 语言编写的类似于 make 工具的程序.与 make 工具相比较,SCons 的配置文件更加简单清晰明了. ...

  7. leetCode 85.Maximal Rectangle (最大矩阵) 解题思路和方法

    Given a 2D binary matrix filled with 0's and 1's, find the largest rectangle containing all ones and ...

  8. android中9-patch图片的使用

    看了非常多文章的介绍,9.png图片有两种区域:可扩展区和内容显示区. 弄了半天才明确什么叫做可扩展区,什么叫做内容显示区. 分享一下自己的理解. 下图是某博客的截图: 图片来自:http://blo ...

  9. MyBatis自动生成代码之generatorConfig配置文件及其详细解读

    <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguratio ...

  10. janos.io

    http://janos.io/ https://developer.mozilla.org/en-US/Firefox_OS/Developing_Firefox_OS/Porting