【发布时间】:2018-11-09 19:40:51
【问题描述】:
我实现了一个刷新按钮,它读取数据库并检查任何新条目并将它们添加到ObservableCollection。我有一个刷新图标,它根据IsRefreshing 的值旋转。像这样:
new Thread(() =>
{
Thread.CurrentThread.IsBackground = true;
IsRefreshing = true;
//Reads database
//ObservableCollection.Add(NewValues)
IsRefreshing = false;
}).Start();
但是运行它会给我一个例外:
这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection。
我显然是以错误的方式解决这个问题,但不确定在执行后台任务时我应该如何保持 UI 响应?
【问题讨论】:
-
你不应该访问其他线程在主线程中创建的控件。
-
不要使用原始线程,使用 async/await 和任务。 ADO.NET 和 EF 已经支持异步执行。在任何情况下,您都不能从另一个线程修改 UI
-
发布事件处理程序的代码和从数据库中读取的代码。应该删除当前带有
Thread的代码