gpt4 book ai didi

c# - 从工作线程访问 UI 线程集合

转载 作者:太空宇宙 更新时间:2023-11-03 10:41:59 25 4
gpt4 key购买 nike

我正在 Visual Studio 2012 中用 c# wpf 编写应用程序。我正在使用 mvvm。我有一个属于 UI 线程的 ObservableCollectionCriteriaCollection,用于从数据库中获取数据我正在使用 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) 行遇到异常;说 This type of CollectionView does not support changes to its SourceCollection from a thread different Dispatcher thread.有人可以帮我解决这个问题吗?

谢谢!

最佳答案

GUI 相关代码只能从 GUI 线程或使用来自另一个线程的调度程序执行:

Application.Current.Dispatcher.Invoke(new Action(() => 
{
// your GUI related code here
}));

关于c# - 从工作线程访问 UI 线程集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25012236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com