2

我有一个无法异步运行的冗长过程,因此就像在复制文件时使用资源管理器一样,我有一个进度对话框。我以模态方式显示对话框,然后执行操作(我们将其称为复制文件以使其保持抽象),更新进度对话框,并使用 Application.DoEvents() 泵送消息以保持应用程序主框架的绘制和响应。

由于对话框是模态的,用户除了观看或取消之外不能做任何事情。换句话说,他们无法选择菜单项或单击任何按钮。

我一直认为 Application.DoEvents 非常邪恶,因为您可以重新输入您不打算重新输入的代码。但在这种情况下,由于进度对话框是模态的,我看不出这是一个糟糕或危险的解决方案的原因。

我是否忽略了某些东西,或者使用 Application.DoEvents 发送消息是与模式对话框有关的合法事情?

4

2 回答 2

0

我看不出对 DoEvents 的这种有限使用有什么特别的问题。当后台处理不是一个选项时,我们成功地在这种非常有限的情况下使用它。

于 2011-12-11T01:28:02.930 回答
0

通常,应用程序中的 UI 线程将发送消息。现在,即使模态对话框运行它们自己的消息泵,这只是为了保持调用行为符合预期(例如,调用仅在模态对话框关闭时返回),处理模态对话框本身并不是必需的。(另请参阅“旧新事物”博客中的这篇博文)

因此,调用它们也不是真正的问题Application.DoEvents(),即使它通常显示设计问题(例如 UI 线程中的非协作处理)并且如果某些窗口消息和事件处理程序相互触发,它可能会导致重新进入 -但这与对话模式无关。

于 2011-12-11T01:39:44.817 回答