Fork me on GitHub

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

 

posted @ 2019-10-12 11:59  猫叔Vincent  阅读(1204)  评论(6编辑  收藏  举报