aw0*_*w04 16 .net c# 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.
Run Code Online (Sandbox Code Playgroud)
我真的只是在更好地了解这里发生的事情之后.任何建议将不胜感激.
编辑
请求的简化示例
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);
}
Run Code Online (Sandbox Code Playgroud)
如果您使用的是WindowsForms,请确保使用Form上的Invoke方法将执行代码保留在Dispatcher的线程上.
http://msdn.microsoft.com/en-us/library/system.windows.forms.form.invoke.aspx
或者,如果使用WPF,请使用Dispatcher类.
http://dotnetpattern.com/wpf-dispatcher