C#中的并发集合

sti*_*mms 3 c# concurrency

我正在寻找一种在C#中获得并发集合的方法,或者至少是一个支持并发枚举器的集合.现在,当我迭代的集合发生变化时,我得到一个InvalidOperationException.我可以深入复制该集合并使用私有副本,但我想知道是否有更好的方法

代码段:

foreach (String s in (List<String>) callingForm.Invoke(callingForm.delegateGetKillStrings))
{
    //do some jazz
}
Run Code Online (Sandbox Code Playgroud)

- 编辑 -

我接受了答案,但也发现我需要确保写入集合的代码也需要尝试获取锁定.

private void addKillString(String s)
{
    lock (killStrings)
    {
        killStrings.Add(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

Dam*_*ian 5

除了做一个深层复制,你最好的选择可能是锁定集合:

   List<string> theList = (List<String> )callingForm.Invoke(callingForm.delegateGetKillStrings);
    lock(theList.SyncRoot) {
        foreach(string s in theList) {
               // Do some Jazz
        }
    }
Run Code Online (Sandbox Code Playgroud)