The progress can be monitored by handling the TransferProgress
event of the Imap or Pop3 class.
Here is a simple example for displaying progress in console application retrieving mail from an Imap
server:
class Program
{
static void client_TransferProgress(object sender, ImapTransferProgressEventArgs e)
{
if (e.BytesTotal > 0)
Console.Write("\r{0:F0}%", 100m * e.BytesTransferred / e.BytesTotal);
}
static void Main(string[] args)
{
using (Imap client = new Imap())
{
// connect and log in
client.Connect("imap.example.com");
client.Login("username", "password");
// select working folder
client.SelectFolder("Inbox");
// get the MessageInfo (without message body and attachments
// but with info whether the message contains attachments)
ImapMessageInfo messageInfo = client.GetMessageInfo(client.CurrentFolder.TotalMessageCount, ImapListFields.Envelope | ImapListFields.MessageStructure);
Console.WriteLine("Reading mail sub. '{0}' (attachments = {1})...", messageInfo.Subject, messageInfo.HasAttachment);
// set the progress event handler
client.TransferProgress +=
new ImapTransferProgressEventHandler(client_TransferProgress);
// get the full message (including attachments)
MailMessage message = client.GetMailMessage(client.CurrentFolder.TotalMessageCount);
Console.WriteLine("\nMail read - ({0} attachaments)", message.Attachments.Count);
}
}
}
In WinForm applications, you can use the same event handler in common way.
Just don't forget to refresh the UI during progress reporting – e.g by calling Application.DoEvents()
method within the event handler.