UWP 在非UI線程中更新UI


大家都知道,不可以在 其他線程訪問 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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM