首页 > 解决方案 > 无法使进度条在多线程上工作

问题描述

我遇到的问题与在不同线程之间使用进度条的跨线程调用有关。我有一个主函数,它生成一个带有进度条的表单,这个函数调用另一个函数,其中包含一个对递归函数的调用,并且 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());
}

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

任何人都可以找到错误?

非常感谢

标签: c#multithreadinginvoke

解决方案


推荐阅读