、、
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)); }
‘’