将字典作为参数传递给线程函数

时间:2013-10-21 12:33:11

标签: c# multithreading collections thread-safety parameterized

如何将字典作为参数传递给线程函数然后遍历呢?

Dictionary<string, Track> dic = allTracks;
updateThread = new Thread(() => toDB(dic));
updateThread.Start();

和功能:

public static void  toDB( Dictionary<string, Track>  dict)
   {
        foreach (KeyValuePair<string, Track> pair in dict)
        { 
          //do something - but I do not alter anything in dictionary 
        }
   }

我试过这样但我收到错误

  

收藏被修改;枚举操作可能无法执行。

1 个答案:

答案 0 :(得分:4)

如果在主线程或传递给的线程中修改了字典,则会出现此异常。您可以使用ConcurrentDictionary或自行实施锁定。

但是,如果您不打算在线程中调用的函数内修改原始集合,并且您也不需要最新值,那么您可以在将副本传递给单独的线程之前简单地创建副本。