gpt4 book ai didi

c# - 使用 BindingOperations.EnableCollectionSynchronization

转载 作者:太空狗 更新时间:2023-10-29 17:30:30 32 4
gpt4 key购买 nike

我有两个 WPF 应用程序“UI”、“Debugger”和一个 ClassLibrary“BL”。对调试器和 BL 的 UI 引用。调试器引用 BL。我在 BL 中有一个名为 MyCollection 的集合。 UI 应用程序启动 Debugger 应用程序,Debugger 绑定(bind)到 BL 中的集合 MyCollection。当我尝试从 UI 应用更改 MyCollection 集合时出现异常。

A first chance exception of type 'System.NotSupportedException' occurred in PresentationFramework.dll

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

我在谷歌上搜索了一下,发现了这个:BindingOperations.EnableCollectionSynchronization我不知道如何使用它。我不想引用我的 BL 项目中的任何 UI dll。有人可以帮助我吗?

感谢您的帮助!

最佳答案

我在 Stack Overflow 上看到的所有例子都错了。从另一个线程修改集合时,您必须锁定集合。

在调度程序 (UI) 线程上:

_itemsLock = new object();
Items = new ObservableCollection<Item>();
BindingOperations.EnableCollectionSynchronization(Items, _itemsLock);

然后从另一个线程:

lock (_itemsLock)
{
// Once locked, you can manipulate the collection safely from another thread
Items.Add(new Item());
Items.RemoveAt(0);
}

本文中的更多信息:http://10rem.net/blog/2012/01/20/wpf-45-cross-thread-collection-synchronization-redux

关于c# - 使用 BindingOperations.EnableCollectionSynchronization,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21720638/

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