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

简单的例子:

Call ExternalLongRunningProcess
Call DoOtherStuff

如何延迟“DoOtherStuff”?

有帮助吗?

解决方案

VB.Net:我会用一个 等一等 事件句柄。

VB 6.0:我见过 DoEvents 循环。

Do
     If isSomeCheckCondition() Then Exit Do
     DoEvents
Loop

最后,你可以睡觉了:

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

Sleep 10000

其他提示

虽然内西奥的 回答 (DoEvents) 会起作用,它会导致你的应用程序 100% 使用一个 CPU。睡眠会使 UI 无响应。您需要的是两者的组合,而似乎最有效的神奇组合是:

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

While IsStillWaitingForSomething()
    DoEvents
    DoEvents
    Sleep(55)
Wend

为什么有两个 DoEvent,其中一个休眠 55 毫秒?55 毫秒的睡眠时间是 VB6 可以处理的最小时间片,在需要超响应性的情况下,有时需要使用两个 DoEvent(不是通过 API,而是如果您的应用程序正在响应外部事件、SendMessage、Interupts 等) )。

如何确定 shell 进程何时终止:

如果您正在调用外部进程,那么您实际上是异步调用它。请参阅上述 MS 支持文档,了解如何等待外部进程完成。

将您的代码分为 2 个进程。运行第一个进程,然后运行“长时间运行的进程”,然后运行第二个进程。

在当前进程的中间运行长时间运行的进程并等待它完成。

我希望您可以将 .net Framework system.dll 或其他内容添加到您的项目引用中,以便您可以执行以下操作:

Dim ALongTime As Integer = 2000
System.Threading.Thread.Sleep(ALongTime)

...每次。我的机器上有 VB6 和 VB.net 2008,对我来说在截然不同的 IDE 之间切换总是很困难。

System.Threading.Thread.Sleep(500)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top