【问题标题】:Wait for download completion in FTP vb6在 FTP vb6 中等待下载完成
【发布时间】:2012-12-24 12:13:34
【问题描述】:

我在名为“inetFTP”的表单上有一个 Internet 传输控制。我打电话后

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

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

【问题讨论】:

    标签: vb6 ftp download


    【解决方案1】:

    通常您会使用控件的StateChanged 事件并至少监视icErroricResponseCompleted 状态。

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

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

    从那里您需要更改您的程序流程以正确适应 Windows 程序的模型。

    可以启动长时间运行的异步操作,但在大多数情况下,只有这么多“值得做”的事情,直到您收到完成信号(或中止等)。

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

    VB6 不是 QBasic,Windows 也不是 DOS。

    【讨论】:

      【解决方案2】:

      您可以使用计时器(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
      

      【讨论】:

      • 是的,但这只会在给定的时间内停止执行,直到下载完成
      【解决方案3】:

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

      Do While inetFTP.StillExecuting
          DoEvents
      Loop
      

      这个循环直到 Internet 传输控制完成它的工作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-01-28
        • 2022-07-27
        • 1970-01-01
        • 1970-01-01
        • 2016-01-02
        • 2018-05-25
        相关资源
        最近更新 更多