如何将字典作为参数传递给线程函数然后遍历呢?
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
}
}
我试过这样但我收到错误
收藏被修改;枚举操作可能无法执行。
答案 0 :(得分:4)
如果在主线程或传递给的线程中修改了字典,则会出现此异常。您可以使用ConcurrentDictionary或自行实施锁定。
但是,如果您不打算在线程中调用的函数内修改原始集合,并且您也不需要最新值,那么您可以在将副本传递给单独的线程之前简单地创建副本。