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
(Tcl) Async Methods Returning an ObjectDemonstrates how to call an asynchronous method that returns an object. This example reads email from a POP3 server using the Async versions of the Chilkat methods.
load ./chilkat.dll # All Chilkat classes can be unlocked at once at the beginning of a program # by calling UnlockBundle. It requires a Bundle unlock code. set chilkatGlob [new_CkGlobal] set success [CkGlobal_UnlockBundle $chilkatGlob "Anything for 30-day trial."] if {$success != 1} then { puts [CkGlobal_lastErrorText $chilkatGlob] delete_CkGlobal $chilkatGlob exit } set mailman [new_CkMailMan] # Set the POP3 server's hostname CkMailMan_put_MailHost $mailman "pop.someMailServer.com" # Set the POP3 login/password and any other requirements.. CkMailMan_put_PopUsername $mailman "myLogin" CkMailMan_put_PopPassword $mailman "myPassword" CkMailMan_put_PopSsl $mailman 1 CkMailMan_put_MailPort $mailman 995 # Connect to the POP3 server: # task is a CkTask set task [CkMailMan_Pop3BeginSessionAsync $mailman] if {[CkMailMan_get_LastMethodSuccess $mailman] == 0} then { puts [CkMailMan_lastErrorText $mailman] delete_CkGlobal $chilkatGlob delete_CkMailMan $mailman exit } # Start the background task. set success [CkTask_Run $task] if {!$success} then { puts [CkTask_lastErrorText $task] delete_CkTask $task delete_CkGlobal $chilkatGlob delete_CkMailMan $mailman exit } # Wait for the POP3 connect task to finish. # The 1/0 returned by Wait applies to the Wait method call, not the task. set maxWaitMs 30000 set success [CkTask_Wait $task $maxWaitMs] if {expr !$success || [expr [[CkTask_get_StatusInt $task] != 7] || [[CkTask_get_TaskSuccess $task] != 1]]} then { if {!$success} then { # The task.LastErrorText applies to the Wait method call. puts [CkTask_lastErrorText $task] } else { # The ResultErrorText applies to the underlying task method call (i.e. the Pop3BeginSession) puts [CkTask_status $task] puts [CkTask_resultErrorText $task] } delete_CkTask $task delete_CkGlobal $chilkatGlob delete_CkMailMan $mailman exit } delete_CkTask $task # Get the number of messages in the mailbox. set task [CkMailMan_GetMailboxCountAsync $mailman] # To keep the example short, we'll skip handling failures. # The failures would be handled in the same way as shown above. set success [CkTask_Run $task] set success [CkTask_Wait $task $maxWaitMs] set numMessages [CkTask_GetResultInt $task] delete_CkTask $task if {$numMessages == 0} then { delete_CkGlobal $chilkatGlob delete_CkMailMan $mailman exit } set email [new_CkEmail] for {set i 1} {$i <= $numMessages} {incr i} { set task [CkMailMan_FetchByMsgnumAsync $mailman $i] if {[CkMailMan_get_LastMethodSuccess $mailman] == 0} then { puts [CkMailMan_lastErrorText $mailman] delete_CkGlobal $chilkatGlob delete_CkMailMan $mailman delete_CkEmail $email exit } set success [CkTask_Run $task] set success [CkTask_Wait $task $maxWaitMs] if {expr !$success || [expr [[CkTask_get_StatusInt $task] != 7] || [[CkTask_get_TaskSuccess $task] != 1]]} then { if {!$success} then { # The task.LastErrorText applies to the Wait method call. puts [CkTask_lastErrorText $task] } else { # The ResultErrorText applies to the underlying task method call (i.e. the FetchByMsgnum) puts [CkTask_status $task] puts [CkTask_resultErrorText $task] } delete_CkTask $task delete_CkGlobal $chilkatGlob delete_CkMailMan $mailman delete_CkEmail $email exit } # Each Chilkat object that can be a return value of an asynchronous task will # have a method named LoadTaskResult. The object returned in the underlying # asynchronous method call is retrieved by calling LoadTaskResult. # To say it another way: The application will provide a pre-existing object of # the desired return type (in this case it is an email object). This object is # loaded by calling LoadTaskResult. set success [CkEmail_LoadTaskResult $email $task] delete_CkTask $task if {!$success} then { puts [CkEmail_lastErrorText $email] delete_CkGlobal $chilkatGlob delete_CkMailMan $mailman delete_CkEmail $email exit } else { puts [CkEmail_from $email]: [CkEmail_subject $email]\n } } delete_CkGlobal $chilkatGlob delete_CkMailMan $mailman delete_CkEmail $email |
© 2000-2024 Chilkat Software, Inc. All Rights Reserved.