等待FTP vb6中的下载完成

时间:2013-01-10 06:51:17

标签: vb6 ftp download

我在名为“inetFTP”的表单上有一个Internet Transfer Control。我打电话后

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

我想暂停代码执行直到下载完成,因此之后不会有任何其他代码在文件上运行,可能会遇到问题。有没有办法做到这一点?

3 个答案:

答案 0 :(得分:2)

通常情况下,您使用控件的StateChanged事件并监控至少icErroricResponseCompleted个州。

但在实际程序中,通常需要将它与Timer控件以及经过时间计数器和取消标志一起使用。您需要确保不会错过任何状态更改(如果事件快速连续发生,有些似乎不会触发事件),处理超时,取消长时间运行等等。

我怀疑控制中有一些长期存在的错误从未被解决过,这就是为什么StateChanged不像人们希望的那样可靠。其中一些可能与面向会话的FTP协议中的固有怪癖或竞争条件有关。 HTTP操作似乎更具确定性。

从那里你需要改变程序流程以适合Windows程序的模型。

可以启动长时间运行的异步操作,但是在大多数情况下,只有在获得完成信号(或中止等)之后,才有更多“值得做”。

所以你这样做Execute然后退出你正在运行的事件处理程序。一旦完成信号通知你就恢复处理完成事件处理程序。

VB6不是QBasic,Windows不是DOS。

答案 1 :(得分:1)

您可以使用Timer(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

答案 2 :(得分:1)

我找到了答案。我应该插入

Do While inetFTP.StillExecuting
    DoEvents
Loop

然后循环,直到Internet Transfer Control完成它的工作。