大家都知道,不可以在 其他線程訪問 UI 線程,訪問 UI 線程包括給 依賴屬性設置值、讀取依賴屬性、調用方法(如果方法里面修改了依賴屬性)等。一旦訪問UI線程,那么就會報錯,為了解決這個問題,需要使用本文的方法,讓后台線程訪問 UI 線程。
本文提供三個方法可以讓其他線程訪問 UI 線程
第一個方法是比較不推薦使用的,可能出現 win10 uwp Window.Current.Dispatcher中Current為null
await Window.Current.Dispatcher.RunAsync(CoreDispatcherPriority.High,
() => { //需要訪問 ui 的代碼 });
請注意,這里使用了 CoreDispatcherPriority ,表示優先級,請不要在這里使用 High ,一般都是使用比較低的優先
為何不設置為 High ,參見 CoreDispatcherPriority
那么比較推薦的一個方法是在一個用戶控件或者Page之類的,如果在里面使用了異步線程需要訪問 ui 的屬性,那么可以使用下面代碼
await Dispatcher.RunAsync(Windows.UI.Core.CoreDispatcherPriority.Normal, () =>
{
//UI code here
});
如果是寫在其他類,沒有 Dispatcher ,那么可以使用下面的代碼
await Windows.ApplicationModel.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
//代碼
});
上面兩種方法都寫在堆棧網 https://stackoverflow.com/a/38175976/6116637
https://stackoverflow.com/questions/7401538/simple-example-of-dispatcherhelper
https://stackoverflow.com/questions/38149767/uwp-update-ui-from-task