题
我在 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 等) )。
将您的代码分为 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)
不隶属于 StackOverflow