概述:AutoResetEvent和ManualResetEvent从字面意思来讲第一个表示的是自动重置,第二个表示手动重置,它们两都有三个方法Reset(),Set(),WaitOne()。在创建对象的时候有一个bool参数,true表示创建有信号的对象,false表示创建无信号的对象。下面来看一段代码:

public partial class Form1 : Form

{

AutoResetEvent autoResetEvent = null;

ManualResetEvent manualResetEvent = null;

public Form1()

{

Form.CheckForIllegalCrossThreadCalls = false;

InitializeComponent();

//创建对象初始化为没有信号

this.autoResetEvent = new AutoResetEvent(false);

//this.manualResetEvent = new ManualResetEvent(false);

创建对象初始化为有信号

//this.autoResetEvent = new AutoResetEvent(true);

//this.manualResetEvent = new ManualResetEvent(true);

}

private void Form1_Load(object sender, EventArgs e)

{

//创建一线程

Thread thread = new Thread(new ThreadStart(Method));

thread.Start();

}

//定义一个线程调用的方法

private void Method()

{

for (int i = 1; i <= 100;i++ )

{

this.label1.Text = i + "";

//将线程堵塞,等待信号

//this.manualResetEvent.WaitOne();

this.autoResetEvent.WaitOne();

Thread.Sleep(1000);

}

}

private void button1_Click(object sender, EventArgs e)

{

this.autoResetEvent.Set();

//this.manualResetEvent.Set();

}

按照这个代码直接执行的话,我们会发现label变为1后就不变了,这是我们如果每点击一次button1那么label就变加1。说明我们没调用一次set方法后,都会自动重置,将信号关闭;如果我们将创建AutoResetEvent的参数改为true,那么说明我们在创建它的时候就给了一次信号,我运行这个程序会发现label变化两次,也就是先变为1再变为2; 如果我们将autoResetEvent注释了,将this.manualResetEvent = new ManualResetEvent(false);注释给取消,当然后面的相应的调用都需要改为manualResetEvent的的调用,这时我们来执行的时候,当程序起来后,label1变为了1,当我们点击button1的时候,label1就不停的加1,说明ManualResetEvent没有自动重置,这就是它们两最大的区别;当然如果我们还是把创建ManualResetEvent对象是的参数修改为true的话,大家想想运行会出现什么个情况呢?如果运行的话lable1就直接不停的加1。

分享到: 
  • 上一篇:TransactionScope使用(三)——TransactionScopeOption的使用
  • 下一篇:TransactionScope使用(四)——超时和隔离级别设置

转载于:https://www.cnblogs.com/zhangchenliang/archive/2012/08/23/2653219.html

AutoResetEvent和ManualResetEvent用法相关推荐

  1. AutoResetEvent与ManualResetEvent区别

    在.Net多线程编程中,AutoResetEvent和ManualResetEvent这两个类经常用到, 他们的用法很类似,但也有区别.Set方法将信号置为发送状态,Reset方法将信号置为不发送状态 ...

  2. AutoResetEvent和ManualResetEvent

    首先说说线程的终止状态和非终止状态.AutoResetEvent和ManualResetEvent的构造函数中,都有bool变量来指明线程的终止状态和非终止状态.true表示终止状态,false表示非 ...

  3. 多线程间通信之AutoResetEvent和ManualResetEvent的原理分析

    AutoResetEvent 允许线程通过发信号互相通信. 通常,当线程需要独占访问资源时使用该类. 线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号. 如果 AutoRe ...

  4. 关于AutoResetEvent 和ManualResetEvent

    在公司的代码里面看到这两个类的使用了,第一次去msdn上的时候,看的一头雾水(关键是没有找对方法) http://www.cnblogs.com/qingyun163/archive/2013/01/ ...

  5. c# AutoResetEvent和ManualResetEvent

    网上有很多AutoResetEvent和ManualResetEvent的详细介绍,在这里不做过多详细的解释,写下自己的一点心得留作备忘. AutoResetEvent和ManualResetEven ...

  6. AutoResetEvent 与 ManualResetEvent

    闲来无事,把AutoResetEvent 与 ManualResetEvent 两个Event进行了一下实践Demo,毕竟以后会遇到多线程的开发问题,现在有时间把它们好好的先试验一下,这样印象会更深刻 ...

  7. C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent

    C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent 本章概要: 1:终止状态和非终止状态 2:AutoResetEvent和ManualResetE ...

  8. 对AutoResetEvent和ManualResetEvent的理解

    一.作用 AutoResetEvent和ManualResetEvent可用于控制线程暂停或继续,拥有重要的三个方法:WaitOne.Set和Reset. 这三个方法的官方定义并不好理解,什么终止.非 ...

  9. 个人对AutoResetEvent和ManualResetEvent的理解

    仅个人见解,不对之处请指正,谢谢. 一.作用 AutoResetEvent和ManualResetEvent可用于控制线程暂停或继续,拥有重要的三个方法:WaitOne.Set和Reset. 这三个方 ...

  10. AutoResetEvent 与 ManualResetEvent区别

    在C#多线程编程中,这两个类几乎是不可或缺的,他们的用法/声明都很类似,那么区别在哪里了? Set方法将信号置为发送状态 Reset方法将信号置为不发送状态 WaitOne等待信号的发送 其实,从名字 ...

最新文章

  1. Access Denied for user root @localhost 解决方案
  2. 【Mongodb】 Replica set的自动故障切换
  3. linux shell 显示文件最后几行
  4. 介绍几个专门面向中文的命名实体识别和关系抽取工具
  5. 哈希表数据结构_算法与数据结构-哈希表
  6. 批量修改 Netapp NFS Export
  7. 均匀带电直线外一点的场强
  8. Vue入门之常用指令
  9. 编译OpenCV缺少python27_d.lib的解决方法
  10. Excel如何实现随机抽取
  11. 苹果airplay是什么 苹果手机投屏到电脑
  12. Excel 批量删除自定义名称
  13. See Conf 悠鹤《蚂蚁庄园背后的技术与思考》笔记
  14. 游戏时弹出内存不能为read的提示框
  15. WIN 7系统建立无线热点
  16. Android 百度地图位置显示和标记
  17. 集成显卡和独立显卡哪个好 集成显卡与独立显卡区别
  18. html导出pdf及word,保留完成样式以及格式调研
  19. mysql cloud ha_MySQL HA
  20. 可解释性机器学习( Explainable Artificial Intelligence (XAI) )文献阅读记录(1.1)

热门文章

  1. matlab hamming 原理,Matlab中加汉明窗 ahmming 作用
  2. 用强化学习来玩Atari游戏(基于Tensorflow的深度Q学习模型)
  3. Navicat Premium11.0.16 for mac 中文破解版
  4. 【网络安全】加解密算法最详解
  5. 19年12月英语六级第一套听力单词
  6. Rhino(犀牛)的视口
  7. vue 饿了么ui如何修改内联样式:element.style
  8. 安卓课设:翻译君APP(附开源地址)
  9. 环境的利用方式对演化博弈模型中合作的影响
  10. python实现多人脸识别