Chilkat HOME .NET Core C# Android™ AutoIt C C# C++ Chilkat2-Python CkPython Classic ASP DataFlex Delphi ActiveX Delphi DLL Go Java Lianja Mono C# Node.js Objective-C PHP ActiveX PHP Extension Perl PowerBuilder PowerShell PureBasic Ruby SQL Server Swift 2 Swift 3,4,5... Tcl Unicode C Unicode C++ VB.NET VBScript Visual Basic 6.0 Visual FoxPro Xojo Plugin
(Visual FoxPro) Async Progress Info LogDemonstrates checking for progress info updates when running a task asynchronously.
LOCAL loChilkatGlob LOCAL lnSuccess LOCAL loMailman LOCAL loEmail LOCAL loTask LOCAL lnCurPctDone LOCAL lcName LOCAL lcValue * All Chilkat classes can be unlocked at once at the beginning of a program * by calling UnlockBundle. It requires a Bundle unlock code. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Global') loChilkatGlob = CreateObject('Chilkat.Global') lnSuccess = loChilkatGlob.UnlockBundle("Anything for 30-day trial.") IF (lnSuccess <> 1) THEN ? loChilkatGlob.LastErrorText RELEASE loChilkatGlob CANCEL ENDIF * The mailman object is used for sending and receiving email. * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.MailMan') loMailman = CreateObject('Chilkat.MailMan') * Set the SMTP server and any required settings. loMailman.SmtpHost = "smtp.mymailserver.com" loMailman.SmtpUsername = "myLogin" loMailman.SmtpPassword = "myPassword" loMailman.StartTLS = 1 * Create a new email object * For versions of Chilkat < 10.0.0, use CreateObject('Chilkat_9_5_0.Email') loEmail = CreateObject('Chilkat.Email') loEmail.Subject = "This is a test" loEmail.Body = "This is a test" loEmail.From = "Chilkat Support <support@chilkatsoft.com>" lnSuccess = loEmail.AddTo("Chilkat Admin","admin@chilkatsoft.com") * Call the async version of the SendEmail method to return a task object. * The task object is loaded, but is in the Inert state -- meaning it is * not yet scheduled to run on Chilkat's background thread pool. loTask = loMailman.SendEmailAsync(loEmail) IF (loMailman.LastMethodSuccess = 0) THEN ? loMailman.LastErrorText RELEASE loChilkatGlob RELEASE loMailman RELEASE loEmail CANCEL ENDIF * Before starting the task, tell it to keep an in-memory log of what would've been * ProgressInfo event callbacks. loTask.KeepProgressLog = 1 * Schedule the task for running on the thread pool. This changes the task's state * from Inert to Live. lnSuccess = loTask.Run() IF (lnSuccess <> 1) THEN ? loTask.LastErrorText RELEASE loTask RELEASE loChilkatGlob RELEASE loMailman RELEASE loEmail CANCEL ENDIF * The application is now free to do anything else * while the email is being sent. * For this example, we'll simply sleep and periodically * check to see if the SendEmail if finished. While checking * however, we'll report on the progress. lnCurPctDone = 0 DO WHILE loTask.Finished <> 1 IF (loTask.PercentDone <> lnCurPctDone) THEN lnCurPctDone = loTask.PercentDone ? STR(lnCurPctDone) + " percent done" ENDIF * Check the progress info log. * Emit any log entries.. DO WHILE (loTask.ProgressLogSize > 0) * Get the 1st entry, emit it, and then remove it.. lcName = loTask.ProgressInfoName(0) lcValue = loTask.ProgressInfoValue(0) ? lcName + ": " + lcValue loTask.RemoveProgressInfo(0) ENDDO * Sleep 100 ms. loTask.SleepMs(100) ENDDO * Just in case there are any remaining entries... DO WHILE (loTask.ProgressLogSize > 0) * Get the 1st entry, emit it, and then remove it.. lcName = loTask.ProgressInfoName(0) lcValue = loTask.ProgressInfoValue(0) ? lcName + ": " + lcValue loTask.RemoveProgressInfo(0) ENDDO * A finished task could be one that was canceled, aborted, or truly finished. * If the task was "canceled", it was canceled prior to actually starting. This could * happen if the task was canceled while waiting in a thread pool queue to be scheduled by Chilkat's * background thread pool scheduler. * If the task was "aborted", it indicates that it was canceled while running in a background thread. * The ResultErrorText will likely indicate that the task was aborted. * If the task "completed", then it ran to completion, but the actual success/failure of the method * is determined by the result obtained via a GetResult* method. (A "completed" task will * have a StatusInt equal to 7. If the task finished, but was not completed, then it must've * been aborted or canceled: IF (loTask.StatusInt <> 7) THEN ? "Task did not complete." ? "task status: " + loTask.Status RELEASE loTask RELEASE loChilkatGlob RELEASE loMailman RELEASE loEmail CANCEL ENDIF * The SendEmail method returns a boolean. Therefore, after the task is finished, * we can get the boolean result by calling GetResultBool. This is the return value had * we called SendEmail synchronously. lnSuccess = loTask.GetResultBool() IF (lnSuccess <> 1) THEN * The task's ResultErrorText contains what would have been in the LastErrorText property had * the SendEmail method been called synchronously. ? loTask.ResultErrorText ELSE ? "Email sent asynchronously." ENDIF RELEASE loTask lnSuccess = loMailman.CloseSmtpConnection() IF (lnSuccess <> 1) THEN ? "Connection to SMTP server not closed cleanly." ENDIF RELEASE loChilkatGlob RELEASE loMailman RELEASE loEmail |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.