這是一部分重要的代碼,用VS2005通過。
使用到兩個(gè)控件,一個(gè)按鈕button1,一個(gè)標(biāo)簽label1。
private void button1_Click(object sender, EventArgs e)
{
Thread thread=new Thread(new ThreadStart(myname));
thread.IsBackground=true;
thread.Start();
// 啟動(dòng)一個(gè)線程。
}
private void myname()
{
MethodInvoker mi = new MethodInvoker(hello);
//創(chuàng)建一個(gè)委托,hello是該委托所托管的代碼,必須是聲明為void的。
Invoke(mi);//同步執(zhí)行委托。
//BeginInvoke(mi);異步執(zhí)行委托。
}
private void hello()
{
label1.Text = "我是跨線程的!";
}
那里不正確,一定要指出,我可不想誤導(dǎo)人,也不想被自己誤導(dǎo)。
PS:寫完后我發(fā)現(xiàn)http://tb.blog.csdn.net/TrackBack.aspx?PostId=715064早就有解釋,比我的還詳細(xì),領(lǐng)教了。
故補(bǔ)充以下代碼:
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線程調(diào)用UI控件";
label1.BeginInvoke(new System.EventHandler(UpdateUI), pList);
}
//直接用System.EventHandler,沒有必要自定義委托
private void UpdateUI(object o, System.EventArgs e)
{
//UI線程設(shè)置label1屬性
label1.Text = o.ToString() + "成功!";
}