См. превосходное сообщение в блоге Эрика Липперта по этой проблеме.
Это вызвано доступом к «измененному закрытию» .
Измените тело вашего цикла на это:
for (int i = 1; i<=3; i++)
{
int j = i; // Prevent use of modified closure.
Thread thread = new Thread(() => testThread("" + j + "__"));
thread.Start();
}
(Обратите внимание, что для цикла foreach
это было исправлено в .Net 4.5, но оно НЕ было исправлено для цикла for
.)