peter
peter

Reputation: 153

Wait for download completion in FTP vb6

I have an Internet Transfer Control on a form called "inetFTP". After I call

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

I want to pause the code execution until the download is finished, so there wouldn't be any other code operating on the file afterwards that could encounter problems. Is there a way to do that?

Upvotes: 0

Views: 1156

Answers (3)

peter
peter

Reputation: 153

I found the answer. I should insert

Do While inetFTP.StillExecuting
    DoEvents
Loop

and this loops until the Internet Transfer Control finishes it job.

Upvotes: 1

Fredrik
Fredrik

Reputation: 2317

You can use a Timer (VBA.DateTime.Timer), see below:

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

Upvotes: 1

Bob77
Bob77

Reputation: 13267

Normally you'd use the control's StateChanged event and monitor for at least the icError and icResponseCompleted states.

But in real programs it is often necessary to use this along with a Timer control and an elapsed time counter and cancellation flag. You'll want to be sure you don't miss any state changes (some don't seem to fire the event if they occur in quick succession), to handle timeouts, to cancel long running operations, etc.

I suspect there are some long standing bugs in the control that have never been ironed out, which is why StateChanged isn't as reliable as one might hope. Some of this may relate to inherent quirks or race conditions in the session-oriented FTP protocol. HTTP operations seem quite a bit more deterministic.

From there you'd need to change your program flow to properly fit the model of a Windows program.

A long running async operation can be started, but then there is only so much more "worth doing" in most cases until you get a completion signal (or an abort, etc.).

So you do that Execute and then exit the event handler you are running in. Once completion is signaled you resume processing in that completion event handler.

VB6 is not QBasic, and Windows is not DOS.

Upvotes: 2

Related Questions