SmtpClient SendAsync blocks UI-Thread

本文关键字:UI-Thread blocks SendAsync SmtpClient | 更新日期: 2023-09-27 18:09:05

我正在用SmptClient发送邮件,需要大约1分钟。

为了不阻塞我的ui线程,我使用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

SmtpClient SendAsync blocks UI-Thread

这听起来很奇怪,特别是考虑到你已经尝试过后台工作人员的方法。作为一个简单的解决方案,你可以把它扔到线程池中,这样它就不会阻塞UI线程了:

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

如果这个阻塞-这意味着你的线程池已经满了,你在应用程序中使用了太多的线程