Sample code for 30+ languages & platforms
PowerShell

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 PowerShell Downloads

PowerShell
Add-Type -Path "C:\chilkat\ChilkatDotNet47-x64\ChilkatDotNet47.dll"

$success = $false

# This example assumes the Chilkat API to have been previously unlocked.
# See Global Unlock Sample for sample code.

$success = $false

$mailman = New-Object Chilkat.MailMan

# Set the POP3 server's hostname
$mailman.MailHost = "pop.example.com"

# Set the POP3 login/password and any other requirements..
$mailman.PopUsername = "myLogin"
$mailman.PopPassword = "myPassword"
$mailman.PopSsl = $true
$mailman.MailPort = 995

# Connect to the POP3 server:
$task = $mailman.Pop3BeginSessionAsync()
if ($mailman.LastMethodSuccess -eq $false) {
    $($mailman.LastErrorText)
    exit
}

# Start the background task.
$success = $task.Run()
if (!$success) {
    $($task.LastErrorText)

    exit
}

# Wait for the POP3 connect task to finish.
# The $true/$false returned by Wait applies to the Wait method call, not the task.
$maxWaitMs = 30000
$success = $task.Wait($maxWaitMs)
if (!$success -or ($task.StatusInt -ne 7) -or ($task.TaskSuccess -ne $true)) {
    if (!$success) {
        # The task.LastErrorText applies to the Wait method call.
        $($task.LastErrorText)
    }
    else {
        # The ResultErrorText applies to the underlying task method call (i.e. the Pop3BeginSession)
        $($task.Status)
        $($task.ResultErrorText)
    }

    exit
}

# Get the number of messages in the mailbox.
$task = $mailman.GetMailboxCountAsync()

# To keep the example short, we'll skip handling failures.
# The failures would be handled in the same way as shown above.

$success = $task.Run()
$success = $task.Wait($maxWaitMs)
$numMessages = $task.GetResultInt()

if ($numMessages -eq 0) {
    exit
}

$email = New-Object Chilkat.Email

for ($i = 1; $i -le $numMessages; $i++) {

    $task = $mailman.FetchByMsgnumAsync($i)
    if ($mailman.LastMethodSuccess -eq $false) {
        $($mailman.LastErrorText)
        exit
    }

    $success = $task.Run()
    $success = $task.Wait($maxWaitMs)
    if (!$success -or ($task.StatusInt -ne 7) -or ($task.TaskSuccess -ne $true)) {
        if (!$success) {
            # The task.LastErrorText applies to the Wait method call.
            $($task.LastErrorText)
        }
        else {
            # The ResultErrorText applies to the underlying task method call (i.e. the FetchByMsgnum)
            $($task.Status)
            $($task.ResultErrorText)
        }

        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.  

    $success = $email.LoadTaskResult($task)

    if (!$success) {
        $($email.LastErrorText)
        exit
    }
    else {
        $($email.From + ": " + $email.Subject + "`n")
    }

}