gpt4 book ai didi

c# - 无法在 CollectionChanged 事件期间更改 ObservableCollection

转载 作者:可可西里 更新时间:2023-11-01 03:10:57 25 4
gpt4 key购买 nike

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

所以我的问题是..我在做什么有什么问题吗?我不明白如何将集合中的项目与事件绑定(bind)到另一个集合会再次触发事件并创建循环引用(尽管如果我对此有误请告诉我)。

另外...有什么解决办法吗?我阅读了几篇建议在单独的线程上运行它的帖子,但是当我尝试这样做时,却出现了以下错误。

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);
}

最佳答案

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

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

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

http://dotnetpattern.com/wpf-dispatcher

关于c# - 无法在 CollectionChanged 事件期间更改 ObservableCollection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16968741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com