跨线程调用控件之MethodInvoker
原文:http://www.cnblogs.com/cm8448940/archive/2008/07/10/1240045.html
使用到两个控件,一个按钮button1,一个标签label1。
private void button1_Click(object sender, EventArgs e) { // 创建一个新线程。 Thread thread = new Thread(new ThreadStart(myname)); thread.IsBackground = true; thread.Start(); } private void myname() { MethodInvoker mi = new MethodInvoker(hello); //创建一个委托,hello是该委托所托管的代码,必须是声明为void的。 Invoke(mi);//同步执行委托。 //BeginInvoke(mi);异步执行委托。 } private void hello() { label1.Text = "我是跨线程的!"; }
private Thread myThread; private void Form1_Load(object sender, EventArgs e) { myThread = new Thread(new ThreadStart(RunsOnWorkerThread)); myThread.Start(); } private void RunsOnWorkerThread() { //DoSomethingSlow(); string pList = "myThread线程调用UI控件"; label1.BeginInvoke(new System.EventHandler(UpdateUI), pList); } //直接用System.EventHandler,没有必要自定义委托 private void UpdateUI(object o, System.EventArgs e) { //UI线程设置label1属性 label1.Text = o.ToString() + "成功!"; }