0

「inetFTP」というフォームに Internet Transfer Control があります。電話したら

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

ダウンロードが完了するまでコードの実行を一時停止したいので、後で問題が発生する可能性のあるファイルで他のコードが動作することはありません。それを行う方法はありますか?

4

3 に答える 3

2

通常は、コントロールのStateChangedイベントを使用して、少なくとも状態icErroricResponseCompleted状態を監視します。

しかし、実際のプログラムでは、多くの場合、Timer コントロール、経過時間カウンター、およびキャンセル フラグと共にこれを使用する必要があります。タイムアウトを処理したり、長時間実行されている操作をキャンセルしたりするために、状態の変化を見逃さないようにする必要があります (それらがすばやく連続して発生した場合、イベントを発生させないように見えるものもあります)。

コントロールには、解決されていない長年のバグがいくつかあると思われます。そのため、StateChanged期待するほど信頼性が高くありません。これの一部は、セッション指向の FTP プロトコルに固有の癖や競合状態に関連している可能性があります。HTTP 操作はかなり決定論的です。

そこから、Windows プログラムのモデルに適切に適合するようにプログラム フローを変更する必要があります。

長時間実行される非同期操作を開始することはできますが、ほとんどの場合、完了信号 (または中止など) を受け取るまでは、「実行する価値のある」ことしかありません。

そのため、Execute実行しているイベント ハンドラーを終了します。完了が通知されたら、その完了イベント ハンドラーで処理を再開します。

VB6 は QBasic ではなく、Windows は DOS ではありません。

于 2013-01-10T13:08:21.903 に答える
1

私は答えを見つけました。挿入すればいい

Do While inetFTP.StillExecuting
    DoEvents
Loop

これは、Internet Transfer Control がジョブを完了するまでループします。

于 2013-01-10T13:18:51.307 に答える
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
于 2013-01-10T13:15:29.307 に答える