最近我能够将for
循环转换为Parallel.For
循环,以加快WinForms应用程序初始化中的繁重任务。
我很惊讶,当Parallel.For()
正在行动时看到一些OnPaint()调用。
为什么会这样?有没有办法阻止用户界面在Parallel.For
期间工作?
编辑:我想节省时间但不改变程序逻辑:我希望Parallel.For
与for
完全一致,节省时间。 UI取决于for循环的结果,OnPaint()
失败,因为数据还没有准备好。
答案 0 :(得分:2)
你永远不应该阻止UI线程(阻止UI工作)。它使应用程序无响应,用户不喜欢。您应该通过灰化表单并显示进度条来优雅地处理它。
答案 1 :(得分:0)
尝试在代表用户界面的表单上调用this.SuspendLayout()
。计算完成后,再次使用this.ResumeLayout()
编辑:
此外,您不应该运行从与创建它们的线程不同的线程更新控件的代码。如果这样做,则必须通过Invoke
方法完成。