例子描述:人生都有追求幸福理想,下面就用三条线程得到房子,车子,妻子,等待全部得到后,显示人生圆满。
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()
{
Messag eBox.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()
{
Messag eBox.Show( " 人生要有的都有了,好开心 " );
}
}
}
注意:
AutoResetEvent.WaitAll();//AutoResetEvent继承WaitHandle 等同于:WaitHandle.WaitAll();
WaitHandles 的数目必须少于或等于 64 个。