首頁 » C#開發 » [C#] 一張圖了解Control Invoke與BeginInvoke之間的差異

[C#] 一張圖了解Control Invoke與BeginInvoke之間的差異

作者:

分類:

Control.Invoke vs Control.BeginInvoke

前篇介紹Winform一個簡單的多執行緒更新畫面方法,今天來談委派的同步與非同步的差異。

在.Net Framework開發視窗程式,遇到需要從其他執行緒更新畫面時,常會使用Control.Invoke、Control.BeginInvoke來調用視窗(UI)執行緒更新畫面。

下圖可以很容易的了解兩者的區別,左右分別是Invoke的同步作業與BeginInvoke的非同步作業。

Invoke vs beginInvoke
Invoke vs beginInvoke

Control.Invoke:當從其他執行緒調用控制元件UI執行緒時,會封鎖直到作業完成才會繼續工作。

Control.BeginInvoke:從其他執行緒調用控制元件UI執行緒時,原執行緒不會被封鎖。換句話是將更新畫面的工作委派給UI執行緒就繼續工作了。

補充:此非同步案例可應用在不需要等待回傳結果的作業,畢竟更新畫面的作業不會需要反饋,如果是需要等待非同步結果可以參考EndInvoke,這邊就先不多談。

參考資料

「cian」的個人頭像

留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *