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()不会起作用,切记!
}

相关文章: