博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C# AutoResetEvent 理解
阅读量:5218 次
发布时间:2019-06-14

本文共 3201 字,大约阅读时间需要 10 分钟。

、、

AutoResetEvent内存中保持着一个bool

False,则使线程阻塞;值为True,使线程退出阻塞

创建AutoResetEvent对象的实例,在函数构造中传递默认的bool值;

AutoResetEvent autoResetEvent = new AutoResetEvent(false);

autoResetEvent.Reset();  //修改bool值为False;

autoResetEvent.Set(); //修改bool值为True;

--------------------------------------------------------------------

WaitOne() 方法,阻止 线程 继续执行进入等待状态;收到信号返回true,否则返回false;

WaitOne(毫秒),等待指定秒数,如果指定秒数收到任何信号,那么后续代码继续执行

 

AutoResetEvent autoResetEvent = new AutoResetEvent(false);//只对一个线程设置为有信号。        public Form4()        {            InitializeComponent();            CheckForIllegalCrossThreadCalls = false;        }        private void Form4_Load(object sender, EventArgs e)        {        }        ///         /// 设置autoResetEvent 为true;        ///         ///         ///         private void button1_Click(object sender, EventArgs e)        {            autoResetEvent.Set();//设置为True 时 WriteMsg() 会跳出循环,停止输出:Continue;        }        private void button2_Click(object sender, EventArgs e)        {            Thread td = new Thread(WriteMsg);            td.Start();        }        ///         /// 输出消息        ///         public void WriteMsg()        {            //autoResetEvent.Set()方法调用后,WaitOne()方法接收到True;            //如果WaitOne返回true那输出Continue;如果返回false退出循环;            while (!autoResetEvent.WaitOne(TimeSpan.FromSeconds(2)))            {                textBox1.AppendText("\r\nContinue");                Thread.Sleep(TimeSpan.FromSeconds(1));            }        }

 

 

 一、执行WaitOne();进入等待状态,后续代码不会继续执行;

AutoResetEvent autoResetEvent = new AutoResetEvent(false);//只对一个线程设置为有信号。        ///         /// 设置autoResetEvent 为true;        ///         ///         ///         private void button1_Click(object sender, EventArgs e)        {            //autoResetEvent.Set();//设置为True ,WriteMsg()方法中autoResetEvent.WaitOne();后面的代码会继续执行;            autoResetEvent.Reset();//设置为False , WriteMsg()方法中autoResetEvent.WaitOne();位置仍处于等待状态,不会继续执行后面的代码;        }        private void button2_Click(object sender, EventArgs e)        {            Thread td = new Thread(WriteMsg);            td.Start();        }        ///         /// 输出消息        ///         public void WriteMsg()        {            autoResetEvent.WaitOne();//当方法执行到此行代码时,会进入等待状态,后面的代码不会继续执行,除非autoResetEvent.Set();被调用;            textBox1.AppendText("\r\nContinue");            Thread.Sleep(TimeSpan.FromSeconds(1));        }

 

 

 

 

二、执行WaitOne(TimeSpan.FromSeconds(5)),等待5秒钟后继续执行后续代码
AutoResetEvent autoResetEvent = new AutoResetEvent(false);//只对一个线程设置为有信号。         private void button1_Click(object sender, EventArgs e)        {            autoResetEvent.Reset();//设置为False ,执行此代码后,WriteMsg()方法的 autoResetEvent.WaitOne()后续的代码不会继续执行        }        private void button2_Click(object sender, EventArgs e)        {            Thread td = new Thread(WriteMsg);            td.Start();        }        ///         /// 输出消息        ///         public void WriteMsg()        {            autoResetEvent.WaitOne(TimeSpan.FromSeconds(5));//当方法执行到此行代码时,会等待5秒钟,如果没有Reset() 和 Set()方法被调用,会继续执行后面的代码;            textBox1.AppendText("\r\nContinue");            Thread.Sleep(TimeSpan.FromSeconds(1));        }

 

 

‘’

 

转载于:https://www.cnblogs.com/lanyubaicl/p/11170698.html

你可能感兴趣的文章
P2571 [SCOI2010]传送带
查看>>
哈希表1
查看>>
用Data Url (data:image/jpg;base64,)将小图片生成数据流形式
查看>>
实验2-2
查看>>
C#初识
查看>>
String,StringBuffer与StringBuilder的区别?? .
查看>>
JavaScript(三) 数据类型
查看>>
移动端rem布局屏幕适配插件(放js中便可使用)
查看>>
Docker
查看>>
bzoj2259 [Oibh]新型计算机
查看>>
对位与字节的深度认识
查看>>
C++编程基础二 16-习题4
查看>>
MongoDB遇到的疑似数据丢失的问题。不要用InsertMany!
查看>>
服务器被疑似挖矿程序植入107.174.47.156,发现以及解决过程(建议所有使用sonatype/nexus3镜像的用户清查一下)...
查看>>
JQuery 学习
查看>>
session token两种登陆方式
查看>>
C# ArrayList
查看>>
IntelliJ IDEA 12集成Tomcat 运行Web项目
查看>>
java,多线程实现
查看>>
个人作业4-alpha阶段个人总结
查看>>