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