在CollectionChanged事件期间无法更改ObservableCollection

时间:2013-06-06 17:45:30

标签: c# .net observablecollection

我的CollectionChanged事件与ObservableCollection相关联。然后,此CollectionChanged事件将调用另一个函数,该函数旨在使用原始集合中的项更新另一个集合(具有相同类型)。我已阅读“在CollectionChanged事件期间无法更改ObservableCollection ”的其他帖子,我完全理解为什么修改CollectionChanged事件内的集合以及为什么会导致这种情况感到不满在循环引用中......但在这种特殊情况下,我没有修改原始集合,我只是将一个项目添加到一个不相关的集合中。

所以对我的问题......我在做什么有什么不对吗?我没有看到如何将集合中的项目与绑定到另一个集合的事件相关联,然后再次触发事件并创建一个循环引用(尽管请告诉我,如果我错了)。

另外......有什么办法吗?我阅读了几篇帖子,建议在一个单独的线程上运行它,但是当我尝试时,我得到了以下错误。

This type of CollectionView does not support changes to its SourceCollection
from a thread different from the Dispatcher thread.

我真的只是在更好地了解这里发生的事情之后。任何建议都将不胜感激。

修改

请求的简化示例

void originalCollection_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{
    update(originalCollection);
}

private void update(object parameter)
{
    foreach (var originalCollectionItem in parameter)
        newCollection.Add(originalCollectionItem);
}

1 个答案:

答案 0 :(得分:7)

如果您使用的是WindowsForms,请确保使用Form上的Invoke方法将执行代码保留在Dispatcher的线程上。

http://msdn.microsoft.com/en-us/library/system.windows.forms.form.invoke.aspx

或者,如果使用WPF,请使用Dispatcher类。

http://dotnetpattern.com/wpf-dispatcher

相关问题