Проблема потоковой передачи при добавлении элементов в ObservableCollection

Я ' 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,
                    ...
                });
            }
        }
    }  

Проблема заключается в том, что когда коллекция результатов запроса содержит элемент, которого нет в целевой коллекции, и мне нужно добавить этот элемент, я получить ошибку времени выполнения: Вызывающий поток не может получить доступ к этому объекту, потому что он принадлежит другому потоку. (я указал на эту строку кода в комментарии)

Тем не менее, если целевая коллекция пуста (на начальная заливка) все позиции добавлены без проблем. (Эту часть кода я также указал в комментарии). Когда элементу просто нужно обновить некоторые из своих полей, также нет проблем, элемент обновляется нормально.

Как я могу исправить эту проблему?

7
задан rem 25 April 2011 в 18:53
поделиться