Я ' m обновление ObservableCollection модели представления WPF в методе обратного вызова асинхронного запроса службы данных 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,
...
});
}
}
}
Проблема заключается в том, что когда коллекция результатов запроса содержит элемент, которого нет в целевой коллекции, и мне нужно добавить этот элемент, я получить ошибку времени выполнения: Вызывающий поток не может получить доступ к этому объекту, потому что он принадлежит другому потоку. (я указал на эту строку кода в комментарии)
Тем не менее, если целевая коллекция пуста (на начальная заливка) все позиции добавлены без проблем. (Эту часть кода я также указал в комментарии). Когда элементу просто нужно обновить некоторые из своих полей, также нет проблем, элемент обновляется нормально.
Как я могу исправить эту проблему?