1. 程式人生 > >WPF自學筆記(四):子執行緒更新UI(Dispatcher.BeginInvoke)

WPF自學筆記(四):子執行緒更新UI(Dispatcher.BeginInvoke)

   在做WPF開發時,如果直接在子執行緒裡更新UI會報錯—–“呼叫執行緒無法訪問此物件,因為另一個執行緒擁有該物件。”,這是因為WPF禁止在非UI執行緒裡直接更新UI介面。

解決方案:

  在子執行緒裡呼叫Dispatcher.BeginInvoke()或者Invoke()方法。

   例如更新一個Button上的文字內容,可以在子執行緒裡這樣寫:

this.myButton.Dispatcher.BeginInvoke(new Action(()=>
{ 
    this.myButton.Content = "change button content!!!";
}))
;

  這裡使用了Action()委託。Dispatcher.BeginInvoke()代表非同步執行,不等待委託結束就更新。Dispatcher.Invoke()代表同步執行,需等待委託執行完成。