Parallel.For()和Windows消息循环

时间:2014-02-07 12:59:31

标签: c# .net winforms parallel-processing message-queue

最近我能够将for循环转换为Parallel.For循环,以加快WinForms应用程序初始化中的繁重任务。

我很惊讶,当Parallel.For()正在行动时看到一些OnPaint()调用。

为什么会这样?有没有办法阻止用户界面在Parallel.For期间工作?

编辑:我想节省时间但不改变程序逻辑:我希望Parallel.Forfor完全一致,节省时间。 UI取决于for循环的结果,OnPaint()失败,因为数据还没有准备好。

2 个答案:

答案 0 :(得分:2)

你永远不应该阻止UI线程(阻止UI工作)。它使应用程序无响应,用户不喜欢。您应该通过灰化表单并显示进度条来优雅地处理它。

答案 1 :(得分:0)

尝试在代表用户界面的表单上调用this.SuspendLayout()。计算完成后,再次使用this.ResumeLayout()

更新UI

编辑: 此外,您不应该运行从与创建它们的线程不同的线程更新控件的代码。如果这样做,则必须通过Invoke方法完成。