从非UI线程更新ObservableCollection

时间:2013-09-18 12:20:33

标签: c# multithreading thread-safety windows-store-apps

我正在使用Windows 8商店应用。我有一个计时器,每两分钟调用一个委托,并发出异步Web请求。结果数据被添加到绑定到UI元素的observablecollection。这样做会引发异常,因为在非UI线程上修改了UI。 在我的代码中的其他地方我已经完成了这个

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

但这导致Window.Current为空的崩溃。我尝试将Window.Current作为参数传递给委托,但这会引发另一个异常。有没有关于如何解决这个问题的建议?

2 个答案:

答案 0 :(得分:2)

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

因此,我建议您使用DispatcherTimer,然后根本不需要使用Dispatcher

答案 1 :(得分:0)

尝试使用

Deployment.Current.Dispatcher.BeginInvoke

Application.Current.Dispatcher.BeginInvoke