首页 > 代码库 > C#中多线程信号控制ManualResetEvent和AutoResetEvent
C#中多线程信号控制ManualResetEvent和AutoResetEvent
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.Windows.Forms; namespace WindowsFormsApplication22 { public partial class Form1 : Form { public Form1() { InitializeComponent(); CheckForIllegalCrossThreadCalls =false ; } static AutoResetEvent AutoR = new AutoResetEvent(false);//只对一个线程设置为有信号。 // static ManualResetEvent Manual = new ManualResetEvent(false);//对一个或多个线程设置为有信号。 private void Form1_Load(object sender, EventArgs e) { } private void button1_Click(object sender, EventArgs e) { AutoR.Set();//例如我在这里使用Set()方法设置为true有信号,设置完后他会自动调用Reset()方法设置为false无信号。 //其它线程将会被AutoR.WaitOne();阻止.直到收到为有信号. // 这样好处在于控制单个线程还是方便的,但是对于多线程的话就麻烦了, // 如果多个线程中对同一个AutoResetEvent 实例的WaitOne方法将只有1个起作用。 // 而ManualResetEvent不会主动Reset,因此此时WaitOne方法将都有效。 // 所以绝大数情况下还是尽量使用ManualResetEvent。 // AutoR.Set();Set()方法表示状态设为ture,让其它线程有信号执行下去。 // AutoR.Reset();方法表示状态设为false,让其它线程无信号即不能执行下去。 // 这就是ManualResetEvent和AutoResetEvent 的主要差别呢? for (int i = 1; i < 6; i++) { Thread td = new Thread(ok); td.Name = i.ToString(); td.Start(); } } public void ok() { AutoR.WaitOne(); //阻止或许为等待当前线程执行。直到收到为有信号则运行。 //true=有信号;false=无信号. textBox1.AppendText(string.Format("| 线程名字:{0} ", Thread.CurrentThread.Name)); Thread.Sleep(2000); } } }
C#中多线程信号控制ManualResetEvent和AutoResetEvent
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。