跨线程调用控件之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() + "成功!";
}
posted @ 2014-01-15 15:41  code_flyer  阅读(220)  评论(0编辑  收藏  举报