0

我目前在我的班上有一本静态字典。虽然我已经在这本字典上实现了锁,但我得到了以下错误。

An InvalidOperationException has occurred. It reports a "collection was modified" error 

这样做的原因是,有时一种方法是使用 foreach 读取字典,而另一个线程正在向其中删除或添加项目。我读到添加

lock ( (  (IDictionary<string,string>)dict_object).SyncRoot )

在发生读取/写入/删除的所有操作上将解决问题,但是我继续收到消息

does not contain a definition of SyncRoot are you missing a using directive

关于如何解决这个问题的任何建议?关于如何使我的静态字典线程安全的任何其他方式?我正在使用.Net 4.0

4

1 回答 1

10

简单:使用ConcurrentDictionary类而不是Dictionary. 它是 .NET 4.0 中可用的线程安全字典实现。

http://msdn.microsoft.com/en-us/library/dd287191(v=vs.100).aspx

您的错误的原因是在接口SyncRoot中定义并在类中实现。因此,为了访问它,您需要将您的实例转换为.ICollectionexplicitlyDictionaryICollection

((ICollection)dict_object).SyncRoot
于 2013-02-19T18:19:56.437 回答