2008-09-18 93 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之間切換。