我有一个用VB6编写的程序,它读取一个长文本文件并执行非常长的操作。 我还实现了进度条,但我的问题是,在一段时间后,我的程序会显示“未响应”,并在任务完成后重新开始响应。
如何解决这个“未响应”问题?
我有一个用VB6编写的程序,它读取一个长文本文件并执行非常长的操作。 我还实现了进度条,但我的问题是,在一段时间后,我的程序会显示“未响应”,并在任务完成后重新开始响应。
如何解决这个“未响应”问题?
当Windows/Explorer在处理消息时长时间没有处理消息时,它会将一个进程更改为“未响应”状态。
在VB6中,如果在不调用DoEvents
的情况下运行长时间的代码段,就会发生这种情况。
不幸的是,VB6不容易做多个线程,所以在操作期间定期调用DoEvents
是最好的选择。理想情况下,这应该在更新进度条位置后立即进行。
在这样做时,您需要小心防止重入。通过在长时间操作开始时禁用控件,完成时重新启用它们来轻松解决这个问题。如果您想让用户取消,则需要使用布尔值,在取消按钮单击事件中设置并在调用DoEvents
之后检查。