一、概述
.NET提供了用于线程之间通信的事件方法,继承结构如下图:
线程的阻塞与解除使用的方法如下图:
二、代码示例
这里使用AutoResetEvent作为示例:
private Thread TriggerThread;
private Thread WaitThread;
private EventWaitHandle ResetEvent;
private void Form1_Load(object sender, EventArgs e)
{
// 创建等待信号的线程
WaitThread = new Thread(WaitThreadMain);
WaitThread.Start();
// 创建触发信号的线程
TriggerThread = new Thread(TriggerThreadMain);
TriggerThread.Start();
// 创建解除线程阻塞事件,AutoResetEevent为解除一次后自动再次阻塞
ResetEvent = new AutoResetEvent(false);
}
/// <summary>
/// 等待线程方法
/// </summary>
private void WaitThreadMain()
{
// 阻塞线程,等待触发线程的信号
for (int i = 0; i < 10; i++)
{
ResetEvent.WaitOne();
this.BeginInvoke(new Action(() => { textBox1.Text = i.ToString(); }));
}
}
/// <summary>
/// 触发线程方法
/// </summary>
private void TriggerThreadMain()
{
// 给出触发信号
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000);
ResetEvent.Set();
}
}