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