Lianja
Lianja
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 Lianja Downloads
llSuccess = .F.
// This example assumes the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.
llSuccess = .F.
loMailman = createobject("CkMailMan")
// Set the POP3 server's hostname
loMailman.MailHost = "pop.example.com"
// Set the POP3 login/password and any other requirements..
loMailman.PopUsername = "myLogin"
loMailman.PopPassword = "myPassword"
loMailman.PopSsl = .T.
loMailman.MailPort = 995
// Connect to the POP3 server:
loTask = loMailman.Pop3BeginSessionAsync()
if (loMailman.LastMethodSuccess = .F.) then
? loMailman.LastErrorText
release loMailman
return
endif
// Start the background task.
llSuccess = loTask.Run()
if (not llSuccess) then
? loTask.LastErrorText
release loTask
release loMailman
return
endif
// Wait for the POP3 connect task to finish.
// The .T./.F. returned by Wait applies to the Wait method call, not the task.
lnMaxWaitMs = 30000
llSuccess = loTask.Wait(lnMaxWaitMs)
if (not llSuccess or (loTask.StatusInt <> 7) or (loTask.TaskSuccess <> .T.)) then
if (not llSuccess) then
// The task.LastErrorText applies to the Wait method call.
? loTask.LastErrorText
else
// The ResultErrorText applies to the underlying task method call (i.e. the Pop3BeginSession)
? loTask.Status
? loTask.ResultErrorText
endif
release loTask
release loMailman
return
endif
release loTask
// Get the number of messages in the mailbox.
loTask = loMailman.GetMailboxCountAsync()
// To keep the example short, we'll skip handling failures.
// The failures would be handled in the same way as shown above.
llSuccess = loTask.Run()
llSuccess = loTask.Wait(lnMaxWaitMs)
lnNumMessages = loTask.GetResultInt()
release loTask
if (lnNumMessages = 0) then
release loMailman
return
endif
loEmail = createobject("CkEmail")
for i = 1 to lnNumMessages
loTask = loMailman.FetchByMsgnumAsync(i)
if (loMailman.LastMethodSuccess = .F.) then
? loMailman.LastErrorText
release loMailman
release loEmail
return
endif
llSuccess = loTask.Run()
llSuccess = loTask.Wait(lnMaxWaitMs)
if (not llSuccess or (loTask.StatusInt <> 7) or (loTask.TaskSuccess <> .T.)) then
if (not llSuccess) then
// The task.LastErrorText applies to the Wait method call.
? loTask.LastErrorText
else
// The ResultErrorText applies to the underlying task method call (i.e. the FetchByMsgnum)
? loTask.Status
? loTask.ResultErrorText
endif
release loTask
release loMailman
release loEmail
return
endif
// 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.
llSuccess = loEmail.LoadTaskResult(loTask)
release loTask
if (not llSuccess) then
? loEmail.LastErrorText
release loMailman
release loEmail
return
else
? loEmail.From + ": " + loEmail.Subject + Chr(10)
endif
next
release loMailman
release loEmail