【发布时间】:2014-01-30 10:14:01
【问题描述】:
我们有一个根据 MVVM 模式构建的应用程序。在不同的时间,我们启动任务去数据库检索数据,然后我们填充一个 WPF 控件与该数据绑定到的 ObservableCollection。
我们有点困惑,当我们填充 ObservableCollection 时,我们是在任务线程而不是 UI 线程上这样做的,但 UI 仍然更新/行为正确。我们预计会出现错误,因此必须更改代码以填充 UI 线程上的集合。
这是一个危险的场景吗?我们是否应该在 UI 线程上进行填充?
获取数据的代码:
Task.Factory.StartNew(() =>
UiDataProvider.RefreshForwardContractReport(fcrIdField.Value)
)
.ContinueWith(task => {
if (task.Result.OperationSuccess)
{
// This updates the ObseravableCollection, should it be run on UI thread??
RefreshReport(task.Result.OperationResult);
}
});
【问题讨论】:
-
如果从数据库中检索数据花费的时间比你不应该在 UI 线程上这样做,因为它会拖拽或冻结屏幕,这通常不是一个好的用户体验。你应该在不同的线程。
-
简单的解决方案。检查你所在的线程。没有必要假设任何事情。
标签: c# wpf multithreading mvvm task