C 跨執行緒呼叫控制項

2021-08-20 19:11:00 字數 1004 閱讀 2909

在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...