Я звоню с помощью рекурсивной функции потоков. Но не работает, потому что все потоки имеют одинаковые параметры: проблема - это 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();
}
Как я могу исправить, все потоки имеют разные параметры.
Это связано с тем, что лямбда делает замыкание по i
, так что код внутри лямбда всегда видит значение i
которое закончило цикл for
, потому что это значение i
к моменту запуска лямбды. Вот еще информация: