例子描述:人生都有追求幸福理想,下面就用三条线程得到房子,车子,妻子,等待全部得到后,显示人生圆满。
View Code
using System;
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsApplication1
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[MTAThread] //不支持一个 STA 线程上针对多个句柄的 WaitAll。解决办法把STAThread改成MTAThread
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
using System.Collections.Generic;
using System.Windows.Forms;
namespace WindowsApplication1
{
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[MTAThread] //不支持一个 STA 线程上针对多个句柄的 WaitAll。解决办法把STAThread改成MTAThread
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
}
View Code
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//定义一个人对象
Person person = new Person();
//这个人去干三件大事
Thread GetCarThread = new Thread(new ThreadStart(person.GetCar));
GetCarThread.Start();
Thread GetHouseThead = new Thread(new ThreadStart(person.GetHouse));
GetHouseThead.Start();
Thread GetWillThead = new Thread(new ThreadStart(person.GetWife));
GetWillThead.Start();
//等待三件事都干成的喜讯通知信息
AutoResetEvent.WaitAll(person.autoEvents);
//这个人就开心了。
person.ShowHappy();
}
}
public class Person
{
//建立事件数组
public AutoResetEvent[] autoEvents = null;
public Person()
{
autoEvents = new AutoResetEvent[]
{
new AutoResetEvent(false),
new AutoResetEvent(false),
new AutoResetEvent(false)
};
}
public void GetCar()
{
MessageBox.Show("捡到奔驰");
autoEvents[0].Set();
}
public void GetHouse()
{
MessageBox.Show("赚到房子");
autoEvents[1].Set();
}
public void GetWife()
{
MessageBox.Show("骗到老婆");
autoEvents[2].Set();
}
public void ShowHappy()
{
MessageBox.Show("人生要有的都有了,好开心");
}
}
}
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
//定义一个人对象
Person person = new Person();
//这个人去干三件大事
Thread GetCarThread = new Thread(new ThreadStart(person.GetCar));
GetCarThread.Start();
Thread GetHouseThead = new Thread(new ThreadStart(person.GetHouse));
GetHouseThead.Start();
Thread GetWillThead = new Thread(new ThreadStart(person.GetWife));
GetWillThead.Start();
//等待三件事都干成的喜讯通知信息
AutoResetEvent.WaitAll(person.autoEvents);
//这个人就开心了。
person.ShowHappy();
}
}
public class Person
{
//建立事件数组
public AutoResetEvent[] autoEvents = null;
public Person()
{
autoEvents = new AutoResetEvent[]
{
new AutoResetEvent(false),
new AutoResetEvent(false),
new AutoResetEvent(false)
};
}
public void GetCar()
{
MessageBox.Show("捡到奔驰");
autoEvents[0].Set();
}
public void GetHouse()
{
MessageBox.Show("赚到房子");
autoEvents[1].Set();
}
public void GetWife()
{
MessageBox.Show("骗到老婆");
autoEvents[2].Set();
}
public void ShowHappy()
{
MessageBox.Show("人生要有的都有了,好开心");
}
}
}
注意:
AutoResetEvent.WaitAll();//AutoResetEvent继承WaitHandle 等同于:WaitHandle.WaitAll();
WaitHandles 的数目必须少于或等于 64 个。