ComponentPro UltimateMail

      Obtaining mailbox information Asynchronously

      Language Filter: AllSend comments on this topic to ComponentPro

      Use GetMailboxStatAsync methods to asynchronously obtain information about a mailbox. These methods get information about the mailbox asynchronously with execution occurring on a new thread, therefore they allow your next line of code to execute immediately.

      In Task-based Asynchronous programs, the single asynchronous method represents the initiation and completion of an asynchronous operation. You may create the continuation code either explicitly, through methods on the Task class (for example, ContinueWith) or implicitly, by using language support built on top of continuations (for example, await in C#, Await in Visual Basic).

      In .NET 4.5 it is recommended to implement the Task-based Asynchronous Pattern.

      In Event-based Asynchronous programs, the event GetMailboxStatCompleted is raised when the GetMailboxStatAsync method completes. In the event handler method of the GetMailboxStatCompleted, you can check if there were any errors by using the Error property of the event data object.

      The following example demonstrates how to asynchronously obtain information about a mailbox:

      Task-based approach

      using System;
      using ComponentPro;
      using ComponentPro.Net.Mail;
      
      ...
      
      // Create a new instance of the Pop3 class.
      Pop3 client = new Pop3();
      
      // Connect to the server.
      client.Connect("myserver");
      
      // Or you can specify the POP3 port with 
      // client.Connect("myserver", 110); 
       
      // Login to the server.
      client.Authenticate("user", "password");
      
      // ... 
       
      // Obtain mainbox information.
      Pop3MailboxStat stat = await client.GetMailboxStatAsync();
      
      // Do something here ...
      
      Console.WriteLine("The number of recent messages: " + stat.MessageCount);
      Console.WriteLine("Mailbox Size: " + stat.Size);
      
      // Do something here ... 
       
      // Disconnect.
      client.Disconnect();
      

      Event-based approach

      using System;
      using ComponentPro;
      using ComponentPro.Net.Mail;
      
      ...
      
      public void DoGetMailboxAsync()
      {
          // Create a new instance of the Pop3 class. 
          Pop3 client = new Pop3();
      
          // Connect to the server. 
          client.Connect("myserver");
      
          // Or you can specify the POP3 port with 
          // client.Connect("myserver", 110); 
       
          // Login to the server. 
          client.Authenticate("user", "password");
      
          // ... 
       
          // Register an event handler. 
          client.GetMailboxStatCompleted += client_GetMailboxInfoCompleted;
      
          // Obtain mainbox information. 
          client.GetMailboxStatAsync();
      
          // Do something here ... 
       
          // Disconnect. 
          client.Disconnect();
      }
      
      void ShowMailboxStat(Pop3MailboxStat stat)
      {
          Console.WriteLine("The number of recent messages: " + stat.MessageCount);
          Console.WriteLine("Mailbox Size: " + stat.Size);
      }
      
      void client_GetMailboxInfoCompleted(object sender, ExtendedAsyncCompletedEventArgs<Pop3MailboxStat> e)
      {
          Pop3 client = (Pop3)sender;
          if (e.Error != null)
          {
              Console.WriteLine("Error: " + e.Error.ToString());
          }
          else 
              ShowMailboxStat(e.Result);
      }