如何在多线程环境中添加或删除ObservableCollection中的元素?

时间:2013-09-11 07:48:30

标签: c# wpf multithreading mvvm

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

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

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

1 个答案:

答案 0 :(得分:0)

不,它无法帮助切换到for循环。

使用Concurrent Observable Collection

这是一个例子:

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

这是另一个:

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

你可以通过简单的谷歌搜索找到更多,并找到最适合你的。