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这听起来很奇怪,特别是考虑到你已经尝试过后台工作人员的方法。作为一个简单的解决方案,你可以把它扔到线程池中,这样它就不会阻塞UI线程了:
ThreadPool.QueueUserWorkItem( (state) =>
{
try {
mailClient.SendAsync(email, null);
} catch (Exception ex) {
// Log ex
}
});
如果这个阻塞-这意味着你的线程池已经满了,你在应用程序中使用了太多的线程