是否可以在不使用DoEvents的情况下取消VB6.0中长时间运行的进程?
例如:
for i = 1 to someVeryHighNumber ' Do some work here ' ... if cancel then exit for end if next Sub btnCancel_Click() cancel = true End Sub
我假设我需要一个"DoEvents"才能"如果取消那么......"还有更好的方法吗?有一阵子了...
不,你做对了,你肯定想要循环中的DoEvents.
如果您将DoEvents
主循环放入并发现减慢处理过多,请尝试调用Windows API函数GetQueueStatus
(比DoEvents快得多)以快速确定是否甚至需要调用DoEvents.GetQueueStatus
告诉您是否有任何要处理的事件.
' at the top: Declare Function GetQueueStatus Lib "user32" (ByVal qsFlags As Long) As Long ' then call this instead of DoEvents: Sub DoEventsIfNecessary() If GetQueueStatus(255) <> 0 Then DoEvents End Sub
不,您必须使用DoEvents,否则所有UI,键盘和Timer事件将在队列中等待.
您唯一能做的就是每1000次迭代调用一次DoEvents等.
"for"循环是否在GUI线程中运行?如果是,是的,你需要一个DoEvents.您可能希望使用单独的Thread,在这种情况下不需要DoEvents.您可以在VB6中完成这个(不简单).