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 に答える