1

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

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

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

阅读其他 SO 答案似乎我无法强制任务在 ThreadPool 线程上运行,因此我倾向于用 BackgroundWorker 替换主任务。

4

1 回答 1

2

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

于 2013-11-15T07:07:24.163 回答