這是一部分重要的代碼,用VS2005通過(guò)。
使用到兩個(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è)線(xiàn)程。
}
private void myname()
{
MethodInvoker mi = new MethodInvoker(hello);
//創(chuàng)建一個(gè)委托,hello是該委托所托管的代碼,必須是聲明為void的。
Invoke(mi);//同步執(zhí)行委托。
//BeginInvoke(mi);異步執(zhí)行委托。
}
private void hello()
{
label1.Text = "我是跨線(xiàn)程的!";
}
那里不正確,一定要指出,我可不想誤導(dǎo)人,也不想被自己誤導(dǎo)。
PS:寫(xiě)完后我發(fā)現(xiàn)http://tb.blog.csdn.net/TrackBack.aspx?PostId=715064早就有解釋?zhuān)任业倪€詳細(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線(xiàn)程調(diào)用UI控件"; label1.BeginInvoke(new System.EventHandler(UpdateUI), pList); } //直接用System.EventHandler,沒(méi)有必要自定義委托 private void UpdateUI(object o, System.EventArgs e) { //UI線(xiàn)程設(shè)置label1屬性 label1.Text = o.ToString() + "成功!"; }
|