在c#應用程式開發中,我們經常需要把ui執行緒和工作執行緒分開程式設計,為了防止介面停止響應。同時,我們也需要在工作執行緒中去更新ui介面的控制項,在clr的執行緒安全中並不允許我們直接在工作執行緒操作ui介面。因此,介紹以下三種方式進行跨執行緒操作ui。
private void button2_click(object sender, eventargs e)
private void updatelabel2(object str)
;// 或者
// actionactiondelegate = delegate(string txt) ;
//同步啟用委託action
this.label2.invoke(actiondelegate, str);
}else
}
該方法與上述方法的唯一差別在於,其中的invoke啟用函式換成了begininvoke啟用函式。
兩個函式的本質區別在於,invoke方法是執行緒同步,當工作執行緒執行完畢後,才會再次觸發;
而begininvoke方法是執行緒非同步,當工作執行緒還未執行完,它便會開啟另乙個執行緒去完成工作執行緒。
backgroundworker是.net的執行多執行緒任務控制項,它允許在單獨的乙個工作執行緒中執行一些複雜的操作(耗時操作),做完後回到原有執行緒(主線程),去操作ui執行緒介面控制項。類似於執行緒同步上下文。在dowork事件中,執行耗時操作;在runworkercompleted事件中操作ui介面。
private void button4_click(object sender, eventargs e)
}//做耗時工作執行緒
void bw_dowork(object sender, doworkeventargs e)
//回到ui主線程
void bw_runworkercompleted(object sender, runworkercompletedeventargs e)
C 跨執行緒呼叫控制項
在c 的應用程式開發中,我們經常要把ui執行緒和工作執行緒分開,防止介面停止響應。同時我們又需要在工作執行緒中更新ui介面上的控制項,下面介紹幾種常用的方法 閱讀目錄 執行緒間操作無效 第一種辦法 禁止編譯器對跨執行緒訪問做檢查 第二種辦法 使用delegate和invoke來從其他執行緒中呼叫控制...
C 跨執行緒呼叫窗體控制項
前段時間遇到跨執行緒呼叫窗體控制項的問題,其實一句話system.windows.forms.control.checkforillegalcrossthreadcalls false 就可以解決,但感覺會有不穩定因素,因此在網上找了一些相應的文章感覺還不錯,第一種用的比較順手 注 在devexpr...
C 跨執行緒呼叫窗體控制項的問題
前段時間遇到跨執行緒呼叫窗體控制項的問題,其實一句話system.windows.forms.control.checkforillegalcrossthreadcalls false 就可以解決,但感覺會有不穩定因素,因此在網上找了一些相應的文章感覺還不錯,第一種用的比較順手 注 在devexpr...