SmtpClient SendAsync阻止UI-Thread

时间:2014-06-18 13:54:36

标签: c# multithreading asynchronous smtpclient

我发送的邮件为SmptClient,需要约1分钟。

为了不阻止我的UI-Thread我使用sendasync()但没有成功。我的GUI被阻止了。代码:

MailMessage email = new MailMessage();
...
Attachment attachement = new Attachment(attachementfile);
Email.Attachments.Add(attachement);

SmtpClient mailClient = new SmtpClient(host, port);
mailClient.Timeout = 300000;  
mailClient.SendCompleted += (s, e) =>
                {
                    email.Dispose();
                }; 

mailClient.SendAsync(email, null);  // very bad processing of events till completed

我也尝试使用Backgroundworker,但UI仍然被阻止。

编辑:我在FTP上传时遇到同样的问题。我使用.NET 3.5

1 个答案:

答案 0 :(得分:0)

这听起来很奇怪,特别是考虑到你已经尝试了背景工作者的方法。 就像一个简单的骨头解决方案,你可以把它扔到线程池,然后它肯定不会阻止UI线程:

ThreadPool.QueueUserWorkItem( (state) => 
{
    try {
          mailClient.SendAsync(email, null);
    } catch (Exception ex) {
          // Log ex
    }
});

如果这阻止 - 这意味着您的ThreadPool已满并且您在应用程序中使用了太多线程。