我想在完成下一行代碼之前完成VB6中的長時間運行過程。我怎樣才能做到這一點?內置功能?我可以控制等待多久?如何在Visual Basic(VB6)中延遲執行代碼?
簡單的例子:
Call ExternalLongRunningProcess
Call DoOtherStuff
如何延緩 'DoOtherStuff'?
我想在完成下一行代碼之前完成VB6中的長時間運行過程。我怎樣才能做到這一點?內置功能?我可以控制等待多久?如何在Visual Basic(VB6)中延遲執行代碼?
簡單的例子:
Call ExternalLongRunningProcess
Call DoOtherStuff
如何延緩 'DoOtherStuff'?
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
DoEvents是您在長時間運行過程中用來將控制權返回給GUI的原因。 – 2008-09-18 18:30:27
將代碼分解爲2個進程。運行第一個,然後運行「長時間運行的進程」,然後運行第二個進程。
在當前進程中間運行您的長時間運行的進程並等待它完成。
How To Determine When a Shelled Process Has Terminated
如果你調用一個外部進程,那麼你是,實際上,稱它是異步的。有關如何等待外部過程完成的信息,請參閱上述MS支持文檔。
儘管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 )。
毫秒我想你的意思。 – 2008-09-21 02:54:16
System.Threading.Thread.Sleep(500)
我希望你可以只添加在.NET Framework system.dll中或任何你的項目引用,這樣你可能只是這樣做:
Dim ALongTime As Integer = 2000
System.Threading.Thread.Sleep(ALongTime)
...每一次。我的機器上有VB6和VB.net 2008,而且我總是很難在不同的IDE之間切換。
你可以提供一些細節嗎?這是一個外部過程,如果是這樣,你怎麼稱呼它? – 2008-09-18 18:10:28
我想你是指的鍵擊CTRL-P就像它提供的MS Access? – 2008-09-18 18:15:23