我的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);
}
答案 0 :(得分:7)
如果您使用的是WindowsForms,请确保使用Form上的Invoke方法将执行代码保留在Dispatcher的线程上。
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.invoke.aspx
或者,如果使用WPF,请使用Dispatcher类。