2013-01-10 100 views
0

我在名爲「inetFTP」的窗體上有一個Internet傳輸控件。我叫等待FTP下載完成vb6

inetFTP.Execute , "Get " & "test.zip" & " " & "C:/test.zip" 

後,我想,直至下載完成,所以不會有任何其他代碼的文件之後,可能遇到的問題工作暫停執行代碼。有沒有辦法做到這一點?

回答

2

通常情況下,您將使用控件的StateChanged事件並監視至少icErroricResponseCompleted狀態。

但是在實際的程序中,經常需要使用它以及Timer控件和經過時間計數器和取消標誌。您需要確保您不會錯過任何狀態更改(如果快速連續發生,有些似乎不會觸發該事件),處理超時,取消長時間運行的操作等。

I懷疑控制中存在一些長期存在的問題,這些問題從未被解決,這就是爲什麼StateChanged不如人們所希望的那樣可靠。其中一些可能與面向會話的FTP協議中固有的怪癖或競爭條件有關。 HTTP操作似乎更確定一些。

從那裏你需要改變你的程序流程,以適合Windows程序的模型。

長時間運行的異步操作可以開始,但是在大多數情況下,只有更多的「值得去做」,直到獲得完成信號(或中止等)。

所以你這樣做Execute然後退出你正在運行的事件處理程序。一旦完成信號,你恢復處理完成事件處理程序。

VB6不是QBasic,而Windows不是DOS。

1

您可以使用一個定時器(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 
+0

是的,但是這隻會停止執行一段給定的時間,直到下載完成 – peter

1

我找到了答案。我應該插入

Do While inetFTP.StillExecuting 
    DoEvents 
Loop 

並且這個循環直到Internet Transfer Control完成它的工作。