這是一部分重要的代碼,,用VS2005通過,。
使用到兩個控件,一個按鈕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);
//創(chuàng)建一個委托,,hello是該委托所托管的代碼,,必須是聲明為void的。
Invoke(mi);//同步執(zhí)行委托,。
//BeginInvoke(mi);異步執(zhí)行委托,。
}
private void hello()
{
label1.Text = "我是跨線程的!";
}
那里不正確,,一定要指出,,我可不想誤導人,也不想被自己誤導,。
PS:寫完后我發(fā)現(xiàn)http://tb.blog.csdn.net/TrackBack.aspx?PostId=715064早就有解釋,,比我的還詳細,領(lǐng)教了,。
故補充以下代碼:
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() + "成功!"; }
|