当前位置:  开发笔记 > 后端 > 正文

在没有DoEvents的情况下在VB6.0中取消长时间运行的进程?

如何解决《在没有DoEvents的情况下在VB6.0中取消长时间运行的进程?》经验,为你挑选了3个好方法。

是否可以在不使用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"才能"如果取消那么......"还有更好的方法吗?有一阵子了...



1> Joel Spolsky..:

不,你做对了,你肯定想要循环中的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



2> GSerg..:

不,您必须使用DoEvents,否则所有UI,键盘和Timer事件将在队列中等待.

您唯一能做的就是每1000次迭代调用一次DoEvents等.



3> TheSoftwareJ..:

"for"循环是否在GUI线程中运行?如果是,是的,你需要一个DoEvents.您可能希望使用单独的Thread,在这种情况下不需要DoEvents.您可以在VB6中完成这个(不简单).

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有