AutoResetEvent和ManualResetEvent用法
概述: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用法相关推荐
- AutoResetEvent与ManualResetEvent区别
在.Net多线程编程中,AutoResetEvent和ManualResetEvent这两个类经常用到, 他们的用法很类似,但也有区别.Set方法将信号置为发送状态,Reset方法将信号置为不发送状态 ...
- AutoResetEvent和ManualResetEvent
首先说说线程的终止状态和非终止状态.AutoResetEvent和ManualResetEvent的构造函数中,都有bool变量来指明线程的终止状态和非终止状态.true表示终止状态,false表示非 ...
- 多线程间通信之AutoResetEvent和ManualResetEvent的原理分析
AutoResetEvent 允许线程通过发信号互相通信. 通常,当线程需要独占访问资源时使用该类. 线程通过调用 AutoResetEvent 上的 WaitOne 来等待信号. 如果 AutoRe ...
- 关于AutoResetEvent 和ManualResetEvent
在公司的代码里面看到这两个类的使用了,第一次去msdn上的时候,看的一头雾水(关键是没有找对方法) http://www.cnblogs.com/qingyun163/archive/2013/01/ ...
- c# AutoResetEvent和ManualResetEvent
网上有很多AutoResetEvent和ManualResetEvent的详细介绍,在这里不做过多详细的解释,写下自己的一点心得留作备忘. AutoResetEvent和ManualResetEven ...
- AutoResetEvent 与 ManualResetEvent
闲来无事,把AutoResetEvent 与 ManualResetEvent 两个Event进行了一下实践Demo,毕竟以后会遇到多线程的开发问题,现在有时间把它们好好的先试验一下,这样印象会更深刻 ...
- C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent
C#笔记20:多线程之线程同步中的信号量AutoResetEvent和ManualResetEvent 本章概要: 1:终止状态和非终止状态 2:AutoResetEvent和ManualResetE ...
- 对AutoResetEvent和ManualResetEvent的理解
一.作用 AutoResetEvent和ManualResetEvent可用于控制线程暂停或继续,拥有重要的三个方法:WaitOne.Set和Reset. 这三个方法的官方定义并不好理解,什么终止.非 ...
- 个人对AutoResetEvent和ManualResetEvent的理解
仅个人见解,不对之处请指正,谢谢. 一.作用 AutoResetEvent和ManualResetEvent可用于控制线程暂停或继续,拥有重要的三个方法:WaitOne.Set和Reset. 这三个方 ...
- AutoResetEvent 与 ManualResetEvent区别
在C#多线程编程中,这两个类几乎是不可或缺的,他们的用法/声明都很类似,那么区别在哪里了? Set方法将信号置为发送状态 Reset方法将信号置为不发送状态 WaitOne等待信号的发送 其实,从名字 ...
最新文章
- Access Denied for user root @localhost 解决方案
- 【Mongodb】 Replica set的自动故障切换
- linux shell 显示文件最后几行
- 介绍几个专门面向中文的命名实体识别和关系抽取工具
- 哈希表数据结构_算法与数据结构-哈希表
- 批量修改 Netapp NFS Export
- 均匀带电直线外一点的场强
- Vue入门之常用指令
- 编译OpenCV缺少python27_d.lib的解决方法
- Excel如何实现随机抽取
- 苹果airplay是什么 苹果手机投屏到电脑
- Excel 批量删除自定义名称
- See Conf 悠鹤《蚂蚁庄园背后的技术与思考》笔记
- 游戏时弹出内存不能为read的提示框
- WIN 7系统建立无线热点
- Android 百度地图位置显示和标记
- 集成显卡和独立显卡哪个好 集成显卡与独立显卡区别
- html导出pdf及word,保留完成样式以及格式调研
- mysql cloud ha_MySQL HA
- 可解释性机器学习( Explainable Artificial Intelligence (XAI) )文献阅读记录(1.1)