跨线程调用控件之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() + "成功!";

}

你可能感兴趣的:(method)