我在VB6中有一个长时间运行的过程,我想在执行下一行代码之前完成。我怎样才能做到这一点?内置功能?我可以控制等待多长时间吗?
琐碎的例子:
Call ExternalLongRunningProcess
Call DoOtherStuff
如何延迟'DoOtherStuff'?
答案 0 :(得分:16)
虽然Nescio的answer(DoEvents)可以正常工作,但它会使您的应用程序使用100%的一个CPU。睡眠将使UI无响应。你需要的是两者的结合,似乎最有效的神奇组合是:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
While IsStillWaitingForSomething()
DoEvents
DoEvents
Sleep(55)
Wend
为什么两个DoEvents,一个睡眠55毫秒? 55毫秒的睡眠是VB6可以处理的最小切片,并且在需要超响应的情况下有时需要使用两个DoEvent(不是通过API,但是如果应用程序响应外部事件,SendMessage,Interupts等)。
答案 1 :(得分:12)
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
答案 2 :(得分:2)
答案 3 :(得分:0)
将代码分解为2个进程。运行第一个,然后运行“长时间运行的进程”,然后运行第二个进程。
答案 4 :(得分:0)
在当前进程的中间运行长时间运行的进程并等待它完成。
答案 5 :(得分:0)
我希望您只需将.net framework system.dll或其他内容添加到项目引用中,以便您可以这样做:
if ( ! $product->is_in_stock()){
echo '<button type="submit"
class="button alt" onclick="window.location.
href=http://http://138.197.9.71/prov-individuales/">contacto</button>';
}
每次都是......我的机器上有VB6和VB.net 2008,我总是很难在不同的IDE之间切换。
答案 6 :(得分:0)
如果您想在不声明 sleep
的情况下编写 wait
或 sleep
,您可以编写一个使用 systemtimer 的循环。这是我在运行解释器时用于测试/调试的内容。如果您需要这样的东西,可以在解释器暂停时添加:
Dim TimeStart as currency
Dim TimeStop as currency
Dim TimePassed as currency
Dim TimeWait as currency
'use this block where you need a pause
TimeWait = 0.5 'seconds
TimeStart = Timer()
TimePassed = 0
Do while TimePassed < TimeWait 'seconds
TimeStop = timer()
TimePassed = TimeStop - TimeStart
doevents
loop
答案 7 :(得分:-3)
System.Threading.Thread.Sleep(500)