最近做了一套MES集成系统,由上料到成品使自动化运行,其中生产过程是逐步的,但是每一个动作都需要独立的线程进行数据监听,那么就需要实现线程等待。
代码:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace ExecutionCourseSystem { public partial class Form3 : Form { public Form3() { InitializeComponent(); } CountdownEvent latch = new CountdownEvent(1); private void refreshData(CountdownEvent latch) { latch.Signal(); } delegate void UpdateText(Control control ,string text); UpdateText color = delegate (Control control,string text) { control.Text = text; }; private void button1_Click(object sender, EventArgs e) { Thread th = new Thread(ProcessMain); th.IsBackground = true; th.Start(); } /// <summary> /// 主线程函数 /// </summary> void ProcessMain() { Process1(); Process2(); Process3(); } /// <summary> /// 动作1 /// </summary> void Process1() { latch = new CountdownEvent(1); Thread thread = new Thread(() => { bool flag = true; int i = 0; while (flag) { if (i > 99) { flag = false; } i++; Thread.Sleep(50); } refreshData(latch); }); thread.Start(); latch.Wait(); this.Invoke(color, new object[] {textBox1, "1" }); } /// <summary> /// 动作2 /// </summary> void Process2() { latch = new CountdownEvent(1); Thread thread = new Thread(() => { bool flag = true; int i = 0; while (flag) { if (i > 99) { flag = false; } i++; Thread.Sleep(50); } refreshData(latch); }); thread.Start(); latch.Wait(); this.Invoke(color, new object[] { textBox1, "2" }); } /// <summary> /// 动作3 /// </summary> void Process3() { latch = new CountdownEvent(1); Thread thread = new Thread(() => { bool flag = true; int i = 0; while (flag) { if (i > 99) { flag = false; } i++; Thread.Sleep(50); } refreshData(latch); }); thread.Start(); latch.Wait(); this.Invoke(color, new object[] { textBox1, "3" }); } } }
多个线程全部执行完毕后再调用方法:
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading; using System.Threading.Tasks; using System.Windows.Forms; namespace ExecutionCourseSystem { public partial class Form3 : Form { public Form3() { InitializeComponent(); } CountdownEvent latch = new CountdownEvent(5); private void Form3_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { Thread thread = new Thread(() => refreshData()); thread.Start(); thread = new Thread(() => refreshData()); thread.Start(); thread = new Thread(() => refreshData()); thread.Start(); thread = new Thread(() => refreshData()); thread.Start(); thread = new Thread(() => refreshData()); thread.Start(); latch.Wait(); MessageBox.Show("线程全部执行完毕"); } private void refreshData() { latch.Signal(); } } }
原文地址:https://www.cnblogs.com/swjian/p/9958937.html
时间: 2024-10-27 06:03:39