如何延迟Visual Basic(VB6)中的代码执行?

时间:2020-03-06 14:22:42  来源:igfitidea点击:

我在VB6中有一个运行很长时间的过程,需要在执行下一行代码之前完成该过程。我怎样才能做到这一点?内置功能?我可以控制等待多长时间?

琐碎的例子:

Call ExternalLongRunningProcess
Call DoOtherStuff

如何延迟" DoOtherStuff"?

解决方案

将代码分成2个过程。运行第一个,然后运行"长期运行的进程",然后运行第二个进程。

在当前流程的中间运行长时间运行的流程,然后等待其完成。

VB.Net:我将使用WaitOne事件句柄。

VB 6.0:我已经看到了DoEvents循环。

Do
     If isSomeCheckCondition() Then Exit Do
     DoEvents
Loop

最后,我们可以睡觉:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Sleep 10000

如何确定Shelled进程何时终止

如果要调用外部进程,那么实际上就是异步调用它。有关如何等待直到外部过程完成的信息,请参阅上面的MS支持文档。

尽管Nescio的答案(DoEvents)有效,但它将导致应用程序使用一个CPU的100%。睡眠将使UI无响应。我们需要将两者结合起来,最有效的魔术组合是:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

While IsStillWaitingForSomething()
    DoEvents
    DoEvents
    Sleep(55)
Wend

为什么要两个DoEvent,一个睡眠55毫秒? 55毫秒的睡眠是VB6可以处理的最小片段,并且在需要超级响应的情况下(有时不是API的要求,但是如果应用程序正在响应外部事件,SendMessage,Interupts等),有时需要使用两个DoEvent。 )。