我发送的邮件为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
答案 0 :(得分:0)
这听起来很奇怪,特别是考虑到你已经尝试了背景工作者的方法。 就像一个简单的骨头解决方案,你可以把它扔到线程池,然后它肯定不会阻止UI线程:
ThreadPool.QueueUserWorkItem( (state) =>
{
try {
mailClient.SendAsync(email, null);
} catch (Exception ex) {
// Log ex
}
});
如果这阻止 - 这意味着您的ThreadPool已满并且您在应用程序中使用了太多线程。