我遇到的问题与在不同线程之间使用进度条进行跨线程调用有关。 我有一个主要功能,可以生成带有进度条的表单 此函数使用Select调用另一个函数,该Select包含对返回函数的调用,并且Task.WaitAll具有异步功能。 我要实现的是每次“根”游览结束时的进度条步骤进度。
我已经尝试过的是在两个调用中都将ProgressBar作为参数传递,然后调用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());
}
就像我说的那样,尽管我已经读了很多书,但我得到的是在最后一行停止的流程,这似乎是正确的方法。
能找到错误的人吗?
非常感谢您