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