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