使用进度报告运行多个任务

时间:2013-11-15 06:46:34

标签: c# multithreading winforms c#-4.0

我在.NET 4中继承了Winforms应用程序(我不能改变它)。应用程序使用TPL并行运行多个任务。首先,创建一个任务,并从该任务生成更多的任务,这些任务执行复杂的计算。主要任务正在等待WaitAll(tasks)

问题是这些小计算任务向主表单报告进度,在每个进度报告中,应用程序调用{​​{1}}来更新进度条,但只有在完成所有任务后才会更新。我认为问题在于主要任务在UI线程上运行,并且通过调用BeginInvoke()它会阻塞该线程,因此WaitAll()调用堆积在事件循环上。

在这种情况下,正确的方法是什么?

阅读其他SO答案似乎我不能强制在ThreadPool线程上运行任务,所以我倾向于用BackgroundWorker替换主任务。

1 个答案:

答案 0 :(得分:2)

在初始任务上设置选项TaskCreationOptions.LongRunning将使其在单独的线程(而不是线程池线程)上运行