【发布时间】:2014-04-12 16:01:41
【问题描述】:
Application.DoEvents() 在主窗口线程上处理密集的表单是否可以成为可行的解决方案?
【问题讨论】:
-
我认为最好使用新线程
-
简答,不。长答案,永远不要使用它。
Application.DoEvents() 在主窗口线程上处理密集的表单是否可以成为可行的解决方案?
【问题讨论】:
Application.DoEvents() 能否成为可行的解决方案 在主窗口线程上进行密集处理?
永远不可能。您可以禁用 UI 以防止重新进入,但这是对用户非常不友好的步骤,因为用户将无法取消操作或关闭应用程序。这是对含义的很好解释:"Keeping your UI Responsive and the Dangers of Application.DoEvents"。
Here 您可以找到一个示例,说明如何将 CPU 密集型工作卸载到池线程,并提供进度更新和取消支持。
在某些情况下,您在进行处理时必须保持在同一个线程上。例如,您可能正在为编辑器控件编写一些实时语法突出显示或拼写检查逻辑。
对于这种情况,您可以使用计时器事件、空闲事件和/或async/await 构建您的逻辑。 This 和 this 将是相关的。
【讨论】: