2008-09-18 178 views
10

我想在完成下一行代码之前完成VB6中的长时间运行过程。我怎样才能做到这一点?内置功能?我可以控制等待多久?如何在Visual Basic(VB6)中延迟执行代码?

简单的例子:

Call ExternalLongRunningProcess 
Call DoOtherStuff 

如何延缓 'DoOtherStuff'?

+0

你可以提供一些细节吗?这是一个外部过程,如果是这样,你怎么称呼它? – 2008-09-18 18:10:28

+0

我想你是指的键击CTRL-P就像它提供的MS Access? – 2008-09-18 18:15:23

回答

11

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 
+1

DoEvents是您在长时间运行过程中用来将控制权返回给GUI的原因。 – 2008-09-18 18:30:27

0

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

0

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

15

尽管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可以处理的最小切片,并且在需要超级响应的情况下(不是通过API,但如果应用程序响应外部事件,SendMessage,Interupts等等,有时需要使用两个DoEvents )。

+0

毫秒我想你的意思。 – 2008-09-21 02:54:16

-3

System.Threading.Thread.Sleep(500)

0

我希望你可以只添加在.NET Framework system.dll中或任何你的项目引用,这样你可能只是这样做:

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

...每一次。我的机器上有VB6和VB.net 2008,而且我总是很难在不同的IDE之间切换。