这是一部分重要的代码,用VS2005通过。
使用到两个控件,一个按钮button1,一个标签label1。
private voidbutton1_Click(objectsender,EventArgse)
{
Thread
thread=new Thread(new ThreadStart(myname));
thread.IsBackground=true;
thread.Start();
//启动一个线程。
}
private voidmyname()
{
MethodInvoker
mi =new MethodInvoker(hello);//创建一个委托,hello是该委托所托管的代码,必须是声明为void的。
Invoke(mi);//同步执行委托。
//BeginInvoke(mi);异步执行委托。
}
private void
hello()
{
label1.Text ="我是跨线程的!";
}
有不不正确的地方,请各位一定要指出,我可不想误导人,也不想被自己误导。
PS: 写完后我发现他处早就有解释,比我的还详细,领教了。
故补充以下代码:
private Thread myThread;
privatevoid Form1_Load(object sender,EventArgs
e)
{
myThread =new Thread(new
ThreadStart(RunsOnWorkerThread));
myThread.Start();
}
privatevoid 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() +"成功!";
}