これらのクラスはマルチスレッドでの読み込み操作は安全ですが、書き込み操作では同期させなければなりません。
ただし読み込み操作であっても、内部で反復子が用いられているメソッドでは、対象のコレクションの追加や除去と同期させなければなりません。
Action select = () => { for (int i = 0; i < 1000; i++) table.Select(); // InvalidOperationException「コレクションが修正されました。列挙操作が実行されない可能性があります。」 }; Action add = () => { for (int i = 0; i < 1000; i++) table.Rows.Add(); }; Parallel.Invoke(select, add);
状況によってはInvalidOperationExceptionの説明が、「DataTable の内部インデックスが破損しています。'n' (DataTable internal index is corrupted: 'n'.)」となります。