在这里,我用的是一个winfrom窗体,以控制台输出,核心代码如下
public partial class Form1 : Form {//转载请保留 http://www.luofenming.com/show.aspx?id=ART2020060100001 public Form1() { InitializeComponent(); } //定义三个信号量对三个线程进行控制 static AutoResetEvent AautoResetEvent = new AutoResetEvent(false); static AutoResetEvent BautoResetEvent = new AutoResetEvent(false); static AutoResetEvent CautoResetEvent = new AutoResetEvent(false); static void ShowA() { for (int i = 0; i < 10; i++) { AautoResetEvent.WaitOne();//阻塞 等待信号 Console.Write("A"); BautoResetEvent.Set();//设置ShowB 信号量有信号 则放开阻塞往下执行ShowB } } static void ShowB() { for (int i = 0; i < 10; i++) { BautoResetEvent.WaitOne(); Console.Write("B"); CautoResetEvent.Set(); } } static void ShowC() { for (int i = 0; i < 10; i++) { CautoResetEvent.WaitOne(); Console.Write("C"); AautoResetEvent.Set(); } } /// <summary> /// 执行三个线程 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void button1_Click(object sender, EventArgs e) { new Action(ShowA).BeginInvoke(null, null); new Action(ShowB).BeginInvoke(null, null); new Action(ShowC).BeginInvoke(null, null); AautoResetEvent.Set();//设置ShowA 信号量有信号 则放开阻塞往下执行ShowA //最终输出结果ABCABCABCABCABCABCABCABCABCABC } }