我有一个漫长的过程,我不能异步运行,所以就像复制文件时的资源管理器一样,我有一个进度对话框。我以模态方式显示对话框,然后执行操作(我们将其称为复制文件以使其保持抽象),更新进度对话框,并使用Application.DoEvents()抽取消息以保持应用程序主框架绘画和响应。当模态进度对话框启动时,可以调用“Application.DoEvents”吗?
由于对话框是模态的,用户除了观看或取消之外无法进行其他操作。换句话说,他们不能选择一个菜单项或点击任何按钮。
我一直认为Application.DoEvents是非常邪恶的,因为你可以重新输入你不打算重入的代码。但在这种情况下,由于进度对话框是模态的,所以我看不出这是一个糟糕或危险的解决方案。
我可以忽略一些事情,或者正在使用Application.DoEvents来抽取消息来处理模态对话吗?
为什么你不能在后台线程中运行它?只需使用Background worker,并使用Control.BeginInvoke更新UI。 – BFree
[Some](http://stackoverflow.com/a/5183623/825024)[阅读](http://stackoverflow.com/a/1115410/825024)。 – Otiel