如何在多线程环境中添加或删除可观察集合中的元素

本文关键字:观察 集合 元素 删除 添加 多线程 环境 | 更新日期: 2023-09-27 18:30:50

我的.NET Framework 4.0 C# MVVM应用程序的ViewModel中有一个ObservableCollection的实例。此可观察集合的名称为工作区。 此集合是视图中 TabControl 的数据源(TabControl 的 ItemSource 属性绑定到该集合)。此集合与两个线程一起使用:线程"A"和线程"B"。线程"A"在集合中添加或删除元素,线程"B"通过foreach循环从集合中读取元素。

foreach (WorkspaceViewModel workspace in this.Workspaces)
{
   . . . .
}

有时,当线程"A"在集合中添加元素时,InvalideOperationException已放置在foreach循环中的线程"B"中。此异常报告:"集合已修改;枚举操作可能无法执行"。如果我将foreach loop替换为for循环,它可以解决我的问题吗?

如何在多线程环境中添加或删除可观察集合中的元素

不,

它无助于切换到 for 循环。

使用并发可观察集合

下面是一个例子:

http://www.codeproject.com/Tips/274373/Concurrent-Observable-Collection

这是另一个:

http://www.codeproject.com/Articles/208361/Concurrent-Observable-Collection-Dictionary-and-So

您可以使用简单的谷歌搜索找到更多内容,并找到最适合您的内容。