C#之多線(xiàn)程Invoke方法實(shí)例詳解
文章錄入:王子 責任編輯:7747.Net 38
【字體:
小大】
在多線(xiàn)程
編程中,我們經(jīng)常要在工作線(xiàn)程中去更新界面顯示,而在多線(xiàn)程中直接調用界面控件的方法是錯誤的做法,Invoke 和 BeginInvoke 就是為了解決這個(gè)問(wèn)題而出現的,使你在多線(xiàn)程中
安全的更新界面顯示。
正確的做法是將工作線(xiàn)程中涉及更新界面的代碼封裝為一個(gè)方法,通過(guò) Invoke 或者 BeginInvoke 去調用,兩者的區別就是一個(gè)導致工作線(xiàn)程等待,而另外一個(gè)則不會(huì )。
而所謂的“一面響應操作,一面添加節點(diǎn)”永遠只能是相對的,使 UI 線(xiàn)程的負擔不至于太大而已,因為界面的正確更新始終要通過(guò) UI 線(xiàn)程去做,我們要做的事情是在工作線(xiàn)程中包攬大部分的運算,而將對純粹的界面更新放到 UI 線(xiàn)程中去做,這樣也就達到了減輕 UI 線(xiàn)程負擔的目的了。
再舉個(gè)簡(jiǎn)單例子說(shuō)明下使用方法,比如你在啟動(dòng)一個(gè)線(xiàn)程,在線(xiàn)程的方法中想更新窗體中的一個(gè)TextBox..
using System.Threading;
public delegate void MyInvoke(string str);
private void btnStartThread_Click(object sender, EventArgs e)
{
Thread thread = new Thread(new ThreadStart(DoWord));
thread.Start();
}
public void DoWord()
{
MyInvoke mi = new MyInvoke(SetTxt);
BeginInvoke(mi,new object[]{"abc"});
}
public void SetTxt(string str)
{
txtReceive.Text = str System.Environment.NewLine;
}
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請
點(diǎn)擊舉報。