Проблема, с которой я столкнулся, связана с вызовом кросс-потоков для использования индикатора выполнения между различными потоками.У меня есть основная функция, которая генерирует форму с индикатором выполнения, эта функция вызывает другую функцию с Select, которая содержит вызов рекурсивной функции и Task.WaitAll для всех асинхронных.Чего я хочу добиться, так это прогрессирования шага индикатора выполнения каждый раз, когда завершается «корневая» рекурсия.
То, что я уже пробовал, это передать ProgressBar в качестве параметра в обоих вызовах, затем вызвать Informke PerformStep.Проблема в том, что похоже, что выполнение приостановлено, и если я фактически приостанавливаю VS из-за выполнения, я замечаю, что поток застрял в этой строке.
private someArray; //this is not relevant
private void mainFunction(){
Form f=new Form();
ProgressBar p=new ProgressBar();
loopFunction(p);
}
private void loopFunction(ProgressBar p){
var tasks=someArray.Select(i => Task.Factory.StartNew(() => insideFunction(p)));
Task.WaitAll(tasks.Cast<Task>().ToArray());
}
private void insideFunction(ProgressBar p){
doSomething();
p.Invoke(new Action()=>p.PerformStep());
}
Как я уже сказал, я получаю поток для остановкив этой последней строке, хотя я много читал, и это, кажется, правильный способ сделать это.
Кто-нибудь, кто может найти ошибку?
Большое спасибо