ManualResetEvent 允许线程通过发信号互相通信。通常,此通信涉及一个线程在其他线程进行之前必须完成的任务。

public static ManualResetEvent mre = new ManualResetEvent(false);
ManualResetEvent建立时是把false作为start的初始状态,这个类用于通知另一个线程,让它等待一个或多个线程。注意,为了通知或监听同一个线程,所有的其它线程都能访问那个类。
等待线程这样写:
  mre.WaitOne();
这将引起等待线程无限期的阻塞并等待类来通知。
发信号的线程应该这样:
  mre.Set();
这样类就会被通知,值变成true,等待线程就会停止等待。在通知事件发生后,我们就可以使用下面语句把线程置于非终止状态,导致线程阻止:
  mre.Reset();
一个测试的例子:

using System;
using System.Threading;
namespace ThreadingTester
{
    class ThreadClass
    {
        public static ManualResetEvent mre = new ManualResetEvent(false);
        public static void trmain()
        {
            Thread tr = Thread.CurrentThread;
            Console.WriteLine("thread: waiting for an event");
            mre.WaitOne();
            Console.WriteLine("thread: got an event");
            for (int x = 0; x < 10; x++)
            {
                Thread.Sleep(1000);
                mre.WaitOne();
                Console.WriteLine(tr.Name + ": " + x);
            }
        }
        static void Main(string[] args)
        {
            Thread thrd1 = new Thread(new ThreadStart(trmain));
            thrd1.Name = "thread1";
            thrd1.Start();
            for (int x = 0; x < 10; x++)
            {
                Thread.Sleep(900);
                Console.WriteLine("Main:" + x);
                if (5 == x) mre.Set();
                if (6 == x) mre.Reset();
                if (8 == x) mre.Set();
            }
            while (thrd1.IsAlive)
            {
                Thread.Sleep(1000);
                Console.WriteLine("Main: waiting for thread to stop");
            }
        }
    }
}

运行的结果为:
thread: waiting for an event
Main:0
Main:1
Main:2
Main:3
Main:4
Main:5
thread: got an event
Main:6
Main:7
Main:8
thread1: 0
Main:9
thread1: 1
Main: waiting for thread to stop
thread1: 2
Main: waiting for thread to stop
thread1: 3
Main: waiting for thread to stop
thread1: 4
Main: waiting for thread to stop
thread1: 5
Main: waiting for thread to stop
thread1: 6
Main: waiting for thread to stop
thread1: 7
Main: waiting for thread to stop
thread1: 8
Main: waiting for thread to stop
thread1: 9
Main: waiting for thread to stop

转载于:https://www.cnblogs.com/fengfeng/archive/2008/06/24/1229037.html

ManualResetEvent用法相关推荐

  1. C#中ManualResetEvent用法简介

    简单介绍 多个线程可以通过调用ManualResetEvent对象的WaitOne方法进入等待或阻塞状态.当控制线程调用Set()方法,所有等待线程将恢复并继续执行. ManualResetEvent ...

  2. C#中ManualResetEvent用法

    ManualResetEvent是如何工作的 在内存中保持着一个bool值,如果bool值为False,则使所有线程阻塞,反之,如果bool值为True,则使所有线程退出阻塞.当我们创建ManualR ...

  3. ManualResetEvent用法详解

    转之:http://blog.tom.com/blog/read.php?bloggerid=313638&blogid=13505 Thread and Sync In C# (C#中的线程 ...

  4. C++/C# Thread多线程总结

    1.背景 一直都想写一篇关于多线程的文章,总结一下这方面的知识,也为自己和有需要的人提供参考,不再赘述,开始吧, 现在计算机一般都是多核的,4核和8核的比较多件,用于线上计算或专用工作的计算机更是大概 ...

  5. C# ManualResetEvent的理解和用法

    ManualResetEvent是C#中一个比较常用的工具,可用于线程间通信,实现一种类似信号量的功能(不知道我这样描述是否恰当,有可能不是"类似",而"就是" ...

  6. C#ManualResetEvent的用法

    这是线程之间交互的一个类,这里着重体现了初始化参数的选择. namespace BaseTest {[TestClass]public class ManualResetEventTest{publi ...

  7. C# Task的用法

    C# Task 的用法 其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观.代码更简洁了,使用Task来进行操作.可以跟线程一样可以轻松的对执行的方法进行控制. 顺便提一下, ...

  8. C# Task 用法

    C# Task 的用法 其实Task跟线程池ThreadPool的功能类似,不过写起来更为简单,直观.代码更简洁了,使用Task来进行操作.可以跟线程一样可以轻松的对执行的方法进行控制. 顺便提一下, ...

  9. C#中异步多线程的常见用法

    先来看几个基本概念(纯属个人见解,可能不准确): 进程:程序运行时,占用的全部运行资源的总和. 线程:线程是隶属于操作系统管理的,也可以有自己的计算资源,是程序执行流的最小单位.任何的操作都是由线程来 ...

最新文章

  1. 预言丨AI之后无AI
  2. J2ME下的游戏精灵的碰撞检测(转)
  3. 为什么程序员需要关心顺序一致性(Sequential Consistency)而不是Cache一致性(Cache Coherence)
  4. java中匿名数组_Swagger UI:数组中的多个匿名对象
  5. Windows安装python,以及python的集成开发环境Pycharm
  6. JEECG 深度使用培训班 周六周日公开课(一期班)
  7. java switch语句与switch表达式区别及使用
  8. Linux开机启动过程(13):start_kernel()->setup_arch()完结
  9. 英文的写作 —— 词汇的积累(环境的描写、写人)
  10. Alfresco安装与配置图解
  11. 光立方实现3D贪吃蛇
  12. aspnetpager 详解 (转)
  13. 沉船会有什么_泰坦尼克号为何会沉没,百年来又为何一直没有打捞?专家一声叹息...
  14. 三、Solr管理控制台(二)
  15. Windows彩色桌面变成灰色,怎么办?
  16. docker适合初学者吗_简化了Docker:面向绝对初学者的动手指南
  17. VB全面控制Excel方法大汇总
  18. 03 - 集合线程安全、锁、Callable、JUC辅助类
  19. 颜色名称-RGB数值对照表
  20. ICCV 2019 | 中国研究者无缘最佳论文奖项,接收论文数量超美国,商汤57篇论文入选...

热门文章

  1. JQuery 样式设置、追加、移除与切换
  2. poj 1308 Is It A Tree?
  3. ie6 下最佳 PNG透明方案【转】
  4. b站在线解析_这款游戏被全B站所唾弃,每个月却依然有5000万玩家坚持在线?!...
  5. MATLAB画图命令zz
  6. python api是什么_Python/C API
  7. MATLAB的VLFeat工具箱
  8. 小技巧教你解决此windows副本不是正版的问题
  9. java 枚举学习--从小程序中学习
  10. 产品认知:如何选择产品经理的产品方向?