Темы имеют одинаковые параметры [дубликаты]

1

Я звоню с помощью рекурсивной функции потоков. Но не работает, потому что все потоки имеют одинаковые параметры: проблема - это i. Все я = st. Позже вся рекурсивная функция не работает нормально.

threads = new Thread[st];
for (int i = 1; i <= st; i++)
 {
 Thread t1 = new Thread(() =>
 {
 rek_md5(crke, i, new char[i], 0, md5Hash);
 });
 t1.Name = i.ToString();
 threads[i-1] = t1;
 t1.Start();
 }

Как я могу исправить, все потоки имеют разные параметры.

Теги:
multithreading

1 ответ

0

Это связано с тем, что лямбда делает замыкание по i, так что код внутри лямбда всегда видит значение i которое закончило цикл for, потому что это значение i к моменту запуска лямбды. Вот еще информация:

http://blogs.msdn.com/b/ericlippert/archive/2009/11/12/closing-over-the-loop-variable-considered-harmful.aspx

Ещё вопросы

Сообщество Overcoder
Наверх
Меню