DataFlex
DataFlex
Async Methods Returning an Object
See more Async Examples
Demonstrates 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.Chilkat DataFlex Downloads
Use ChilkatAx-win32.pkg
Procedure Test
Boolean iSuccess
Handle hoMailman
Variant vTask
Handle hoTask
Integer iMaxWaitMs
Integer iNumMessages
Handle hoEmail
Integer i
String sTemp1
String sTemp2
Integer iTemp1
Boolean bTemp1
Move False To iSuccess
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
Move False To iSuccess
Get Create (RefClass(cComChilkatMailMan)) To hoMailman
If (Not(IsComObjectCreated(hoMailman))) Begin
Send CreateComObject of hoMailman
End
// Set the POP3 server's hostname
Set ComMailHost Of hoMailman To "pop.example.com"
// Set the POP3 login/password and any other requirements..
Set ComPopUsername Of hoMailman To "myLogin"
Set ComPopPassword Of hoMailman To "myPassword"
Set ComPopSsl Of hoMailman To True
Set ComMailPort Of hoMailman To 995
// Connect to the POP3 server:
Get ComPop3BeginSessionAsync Of hoMailman To vTask
If (IsComObject(vTask)) Begin
Get Create (RefClass(cComChilkatTask)) To hoTask
Set pvComObject Of hoTask To vTask
End
Get ComLastMethodSuccess Of hoMailman To bTemp1
If (bTemp1 = False) Begin
Get ComLastErrorText Of hoMailman To sTemp1
Showln sTemp1
Procedure_Return
End
// Start the background task.
Get ComRun Of hoTask To iSuccess
If (Not iSuccess) Begin
Get ComLastErrorText Of hoTask To sTemp1
Showln sTemp1
Send Destroy of hoTask
Procedure_Return
End
// Wait for the POP3 connect task to finish.
// The True/False returned by Wait applies to the Wait method call, not the task.
Move 30000 To iMaxWaitMs
Get ComWait Of hoTask iMaxWaitMs To iSuccess
Get ComStatusInt Of hoTask To iTemp1
Get ComTaskSuccess Of hoTask To bTemp1
If (Not iSuccess Or (iTemp1 <> 7) Or (bTemp1 <> True)) Begin
If (Not iSuccess) Begin
// The task.LastErrorText applies to the Wait method call.
Get ComLastErrorText Of hoTask To sTemp1
Showln sTemp1
End
Else Begin
// The ResultErrorText applies to the underlying task method call (i.e. the Pop3BeginSession)
Get ComStatus Of hoTask To sTemp1
Showln sTemp1
Get ComResultErrorText Of hoTask To sTemp1
Showln sTemp1
End
Send Destroy of hoTask
Procedure_Return
End
Send Destroy of hoTask
// Get the number of messages in the mailbox.
Get ComGetMailboxCountAsync Of hoMailman To vTask
If (IsComObject(vTask)) Begin
Get Create (RefClass(cComChilkatTask)) To hoTask
Set pvComObject Of hoTask To vTask
End
// To keep the example short, we'll skip handling failures.
// The failures would be handled in the same way as shown above.
Get ComRun Of hoTask To iSuccess
Get ComWait Of hoTask iMaxWaitMs To iSuccess
Get ComGetResultInt Of hoTask To iNumMessages
Send Destroy of hoTask
If (iNumMessages = 0) Begin
Procedure_Return
End
Get Create (RefClass(cComChilkatEmail)) To hoEmail
If (Not(IsComObjectCreated(hoEmail))) Begin
Send CreateComObject of hoEmail
End
For i From 1 To iNumMessages
Get ComFetchByMsgnumAsync Of hoMailman i To vTask
If (IsComObject(vTask)) Begin
Get Create (RefClass(cComChilkatTask)) To hoTask
Set pvComObject Of hoTask To vTask
End
Get ComLastMethodSuccess Of hoMailman To bTemp1
If (bTemp1 = False) Begin
Get ComLastErrorText Of hoMailman To sTemp1
Showln sTemp1
Procedure_Return
End
Get ComRun Of hoTask To iSuccess
Get ComWait Of hoTask iMaxWaitMs To iSuccess
Get ComStatusInt Of hoTask To iTemp1
Get ComTaskSuccess Of hoTask To bTemp1
If (Not iSuccess Or (iTemp1 <> 7) Or (bTemp1 <> True)) Begin
If (Not iSuccess) Begin
// The task.LastErrorText applies to the Wait method call.
Get ComLastErrorText Of hoTask To sTemp1
Showln sTemp1
End
Else Begin
// The ResultErrorText applies to the underlying task method call (i.e. the FetchByMsgnum)
Get ComStatus Of hoTask To sTemp1
Showln sTemp1
Get ComResultErrorText Of hoTask To sTemp1
Showln sTemp1
End
Send Destroy of hoTask
Procedure_Return
End
// 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.
Get ComLoadTaskResult Of hoEmail vTask To iSuccess
Send Destroy of hoTask
If (Not iSuccess) Begin
Get ComLastErrorText Of hoEmail To sTemp1
Showln sTemp1
Procedure_Return
End
Else Begin
Get ComFrom Of hoEmail To sTemp1
Get ComSubject Of hoEmail To sTemp2
Showln sTemp1 ": " sTemp2 (character(10))
End
Loop
End_Procedure