无法使进度条在多线程上工作

时间:2019-03-26 16:10:04

标签: c# multithreading invoke

我遇到的问题与在不同线程之间使用进度条进行跨线程调用有关。 我有一个主要功能,可以生成带有进度条的表单 此函数使用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());
}

就像我说的那样,尽管我已经读了很多书,但我得到的是在最后一行停止的流程,这似乎是正确的方法。

能找到错误的人吗?

非常感谢您

0 个答案:

没有答案