我在名爲「inetFTP」的窗體上有一個Internet傳輸控件。我叫等待FTP下載完成vb6
inetFTP.Execute , "Get " & "test.zip" & " " & "C:/test.zip"
後,我想,直至下載完成,所以不會有任何其他代碼的文件之後,可能遇到的問題工作暫停執行代碼。有沒有辦法做到這一點?
我在名爲「inetFTP」的窗體上有一個Internet傳輸控件。我叫等待FTP下載完成vb6
inetFTP.Execute , "Get " & "test.zip" & " " & "C:/test.zip"
後,我想,直至下載完成,所以不會有任何其他代碼的文件之後,可能遇到的問題工作暫停執行代碼。有沒有辦法做到這一點?
通常情況下,您將使用控件的StateChanged
事件並監視至少icError
和icResponseCompleted
狀態。
但是在實際的程序中,經常需要使用它以及Timer控件和經過時間計數器和取消標誌。您需要確保您不會錯過任何狀態更改(如果快速連續發生,有些似乎不會觸發該事件),處理超時,取消長時間運行的操作等。
I懷疑控制中存在一些長期存在的問題,這些問題從未被解決,這就是爲什麼StateChanged
不如人們所希望的那樣可靠。其中一些可能與面向會話的FTP協議中固有的怪癖或競爭條件有關。 HTTP操作似乎更確定一些。
從那裏你需要改變你的程序流程,以適合Windows程序的模型。
長時間運行的異步操作可以開始,但是在大多數情況下,只有更多的「值得去做」,直到獲得完成信號(或中止等)。
所以你這樣做Execute
然後退出你正在運行的事件處理程序。一旦完成信號,你恢復處理完成事件處理程序。
VB6不是QBasic,而Windows不是DOS。
您可以使用一個定時器(VBA.DateTime.Timer),見下圖:
Dim PauseTime As Single, start As Single
PauseTime = 2 ' pause the execution of code for two (2) seconds:
start = Timer
Do While Timer < start + PauseTime
DoEvents
Loop
我找到了答案。我應該插入
Do While inetFTP.StillExecuting
DoEvents
Loop
並且這個循環直到Internet Transfer Control完成它的工作。
是的,但是這隻會停止執行一段給定的時間,直到下載完成 – peter