Control.Invoke vs Control.BeginInvoke
前篇介紹Winform一個簡單的多執行緒更新畫面方法,今天來談委派的同步與非同步的差異。
在.Net Framework開發視窗程式,遇到需要從其他執行緒更新畫面時,常會使用Control.Invoke、Control.BeginInvoke來調用視窗(UI)執行緒更新畫面。
下圖可以很容易的了解兩者的區別,左右分別是Invoke的同步作業與BeginInvoke的非同步作業。
Control.Invoke:當從其他執行緒調用控制元件UI執行緒時,會封鎖直到作業完成才會繼續工作。
Control.BeginInvoke:從其他執行緒調用控制元件UI執行緒時,原執行緒不會被封鎖。換句話是將更新畫面的工作委派給UI執行緒就繼續工作了。
補充:此非同步案例可應用在不需要等待回傳結果的作業,畢竟更新畫面的作業不會需要反饋,如果是需要等待非同步結果可以參考EndInvoke,這邊就先不多談。
發佈留言