非 UI 线程更新 ObservableCollection

3

我正在开发一个Windows 8商店应用程序。我有一个计时器,每两分钟调用一个委托并发起异步Web请求。结果数据被添加到一个可观察集合中,该集合绑定到UI元素。这样做会抛出异常,因为在非UI线程上修改UI。

在我的代码的其他地方,我已经这样做了。

await Window.Current.CoreWindow.Dispatcher.RunAsync( CoreDispatcherPriority.Normal, async () =>
{
    ui code here
}

但这会导致 Window.Current 为空的崩溃。我尝试将 Window.Current 作为参数传递到委托中,但这会抛出不同的异常。有没有什么建议来解决这个问题?
2个回答

4

通常情况下,让UI线程调用后台操作会更容易,而不是让后台操作更新UI线程。

因此,我建议您使用DispatcherTimer,这样您将不需要使用Dispatcher


如果它是在逻辑上/被调用时只运行一次的代码,即不需要计时器来安排...有没有更简单的方法来避免调度程序和window.current == null问题? - Allstar
@Allstar:我不太清楚要求是什么。你可以将自己的问题和代码一起发布吗? - Stephen Cleary
@StephenCleary,这是链接:https://stackoverflow.com/questions/57522322/correct-way-to-access-ui-from-background-thread-in-uwp 谢谢。 - Allstar

0

尝试使用

Deployment.Current.Dispatcher.BeginInvoke

或者

Application.Current.Dispatcher.BeginInvoke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接