Progress Monitoring in VB6 without Freezing the User Interface

This describes how to use events (callbacks) to monitor the progress (with abort capability) of a Chilkat method call, while keeping the user-interface responsive.

The Chilkat components (Email, IMAP, HTTP, FTP2, Zip, etc.) provide a common property named HeartbeatMs. This controls the frequency, in milliseconds, at which an AbortCheck event is fired during a lengthy non-blocking call, such as when reading email, downloading a file, creating a zip archive, etc. The default value of HeartbeatMs is 0, which means that AbortCheck events are not called.

The solution to keeping your VB6 user-interface responsive is to set HeartbeatMs to a small value, such as 100ms. Within the AbortCheck event, call DoEvents to allow the VB6 runtime to process UI events. Here is an example:

' When using events, you must declare the mailman "withevents"
Public WithEvents mailman As ChilkatMailMan
	
Dim bAbort As Integer
	
Private Sub ReadEmail_Click()
	
    mailman.MailHost = "mail.example.com"
    mailman.PopUsername = "myUsername"
    mailman.PopPassword = "myPassword"
    mailman.HeartbeatMs = 100
	
    Dim bundle As ChilkatEmailBundle
	
    ' Copy the email from the POP3 server without removing it.
    ' The progress bar will update with the percentage completion as
    ' the CopyMail proceeds.
    Set bundle = mailman.CopyMail()
	
    ' ...
	
End Sub
	
Private Sub AbortButton_Click()
    bAbort = 1
End Sub
	
' Abort check is called at intervals according to HeartbeatMs
Private Sub mailman_AbortCheck(abort As Long)
	
    ' If the abort button was pressed, bAbort is 1 and
    ' the operation is aborted.
    abort = bAbort
    DoEvents
	
End Sub
	
Private Sub mailman_ReadPercentDone(ByVal percentDone As Long, abort As Long)
    ' Set abort = 1 if you wish to abort.
    ProgressBar1.Value = percentDone
End Sub
	
Private Sub Form_Load()

	Dim glob As New ChilkatGlobal
	Dim success As Long
	success = glob.UnlockBundle("Anything for 30-day trial")

    ProgressBar1.Value = 0
    bAbort = 0
End Sub