我正在更新一个WPF ViewModel的ObservableCollection,在WCF数据服务异步查询回调方法中:
ObservableCollection<Ent2> mymodcoll = new ObservableCollection<Ent2>();
...
query.BeginExecute(OnMyQueryComplete, query);
...
private void OnMyQueryComplete(IAsyncResult result)
{
...
var repcoll = query.EndExecute(result);
if (mymodcoll.Any())
{
foreach (Ent c in repcoll)
{
var myItem = mymodcoll.Where(p => p.EntID == c.EntID).FirstOrDefault();
if (myItem != null)
{
myItem.DateAndTime = c.DateAndTime; // here no problems
myItem.Description = c.Description;
...
}
else
{
mymodcoll.Add(new Ent2 //here I get a runtime error
{
EntID = c.EntID,
Description = c.Description,
DateAndTime = c.DateAndTime,
...
});
}
}
}
else
{
foreach (Ent c in repcoll)
{
mymodcoll.Add(new Ent2 //here, on initial filling, there's no error
{
EntID = c.EntID,
Description = c.Description,
DateAndTime = c.DateAndTime,
...
});
}
}
}
问题是,当一个查询结果集合包含一个目标集合中不存在的项目并且我需要添加此项目时,我会收到运行时错误:调用线程无法访问此对象,因为不同的线程拥有它。(我通过注释指出了这行代码)
然而,如果目标集合为空(在初始填充时),所有项目都已成功添加而没有任何问题。(这部分代码我也通过注释指出)。当一个项目只需要更新它的一些字段时,也没有问题,该项目可以成功更新。
我该如何解决这个问题?
SmartObservableCollection
类型。但是现在我在您的基类中遇到了相同的错误,在OnCollectionChanged(NotifyCollectionChangedEventArgs e)
方法的base.OnCollectionChanged(e);
代码行中。我可能错过了什么? - remDispatcher
зҡ„Invoke
жҲ–BeginInvoke
ж–№жі•жҸҗдҫӣдёҖдёӘ委жүҳгҖӮ - Femaref