【发布时间】:2018-09-17 17:40:05
【问题描述】:
我正在尝试通过调度程序从后台线程更新一些 UWP UI。 但是,传递给 RunAsync 方法的处理程序仍在后台线程上执行。
我不知道如何解决这个问题 - 我错过了什么吗?
--编辑--
我只有一个窗口,即Window.Current
我已经尝试了 Community Toolkit DispatcherHelper 类,但我仍然得到完全相同的异常
private static async void OnSelectedItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var panel = (SidePanelInfo) d;
var x = e.NewValue as TaskItemViewModel;
await DispatcherHelper.ExecuteOnUIThreadAsync(() =>
{
panel.DescriptionBox.Document.SetText(TextSetOptions.FormatRtf, x?.Description ?? "");
});
}
【问题讨论】:
-
您是否尝试过在没有调度程序的情况下设置文本?
-
是的。我添加了调度程序调用来尝试修复,因为这看起来像是所有 XAML 控件共有的跨线程异常
-
我查看了实时可视化树,肯定只有 1 个窗口。既然我知道没有一个直截了当的答案,我自己会更深入地研究这个问题。感谢您的帮助
-
好的 - 这是意料之外的。我一直工作回到 App.xaml.cs 中的构造函数,并从后台线程调用它。那是最出乎意料的。然后将所有 Windows、页面和控件加载到后台线程上。 SelectedItem 是在初始化期间设置的——所有这些都发生在后台线程上。我真的不明白
-
实际上,每个 UWP 应用都会发生这种情况