1

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

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 
        }
   }

我试过这样,但我得到一个错误

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

4

1 回答 1

4

如果您的字典在主线程或您传递给的线程中被修改,您将收到此异常。您可以使用ConcurrentDictionary或自己实现锁定。

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

于 2013-10-21T12:43:35.497 回答