我正在 Visual studio 2012 中用 c# wpf 编写一个应用程序。我正在使用 mvvm。 我有一个 ObservableCollectionCriteriaCollection 属于 UI 线程,为了从数据库获取数据,我使用 Task.Factory 因为数据很大并保存在远程服务器上。 当我单击 GetData 按钮时,将执行以下代码。 我的代码是这样的:
void GetData(object obj)
{
if (CriteriaCollection == null)
CriteriaCollection = new ObservableCollection<Criteria>();
if (SelectedIndex != null && SelectedCriteria != null)
{
bool results = this.CriteriaCollection.Any(report =>
report.CriteriaName.Equals(
this.SelectedCriteria.CriteriaName.ToString()));
if (!results)
{
Task.Factory.StartNew(() =>
{
IsBusy = true;
Criteria newCriteria = new Criteria();
ExecuteGetDataFromDB(null);
///some code which populates values and fills newCriteria
CriteriaCollection.Add(newCriteria);
}).ContinueWith(result =>
{
IsBusy = false;
});
}
}
}
我在 CriteriaCollection.Add(newCriteria); 行遇到异常说 这种类型的 CollectionView 不支持从与 Dispatcher 线程不同的线程更改其 SourceCollection。
有人可以帮我解决这个问题吗?
谢谢!
最佳答案
GUI 相关代码只能从 GUI 线程执行,或者使用另一个线程的调度程序执行:
Application.Current.Dispatcher.Invoke(new Action(() =>
{
// your GUI related code here
}));
关于c# - 从工作线程访问 UI 线程集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012236/