我目前在班上有一个静态字典。虽然我已经在这本字典上实现了锁,但是我收到了以下错误。
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
答案 0 :(得分:10)
简单:使用ConcurrentDictionary
类而不是Dictionary
。它是.NET 4.0中提供的线程安全字典实现。
http://msdn.microsoft.com/en-us/library/dd287191(v=vs.100).aspx
您的错误原因是SyncRoot
接口中定义了ICollection
,并在explicitly
类中实现了Dictionary
。因此,要访问它,您需要将实例强制转换为ICollection
。
((ICollection)dict_object).SyncRoot