AutoResetEvent and ManualResetEvent 的初始化
两者初始化时可以接受一个 bool 类型值作为构造函数的参数.
false: 无信号 (非终止状态)
true: 有信号 (终止状态)
/// <summary>
/// 注释为程序执行流
/// </summary>
public partial class Form1 : Form
{
AutoResetEvent autoResetEvent = new AutoResetEvent(false);
private void button1_Click(object sender, EventArgs e)
{
Thread t1 = new Thread(this.Fun1);
t1.Start();
// 阻塞当前线程,转而执行t1线程
Thread.Sleep(3000);
// 3秒后给调用set()给出信号,当前线程后面没有代码了,程序转而执行t1线程
autoResetEvent.Set();
}
void Fun1()
{
// 由于信号初始化时的状态时false,waitone()会阻塞当前线程,等待信号
autoResetEvent.WaitOne();
MessageBox.Show("t1 step1 end!");
}
// 结论
// 此程序3秒后弹出 "t1 step1 end!"
// 如果初始化 autoResetEvent 时使用 true 参数,程序会立刻弹出 "t1 step1 end!"
// 在有信号的状态下,.WaitOne()不会起作用,切记!
}