我有以下代码:
public static void Send(this MailMessage email)
{
if (!isInitialized)
Initialize(false);
//smtpClient.SendAsync(email, "");
email.IsBodyHtml = true;
Thread mailThread = new Thread(new ParameterizedThreadStart(
(o) =>
{
var m = o as MailMessage;
SmtpClient client= new SmtpClient("smtpserveraddress");
client.Send(m);
}));
mailThread.Start(email);
我希望邮件发送在后台完成而不会干扰主线程。它完蛋后我不在乎。
我是否需要以某种方式处理已创建线程的处置( mailThread )? 或者它在完成工作后会自动处理吗?
请不要推荐SendAsync方法。我想手动创建线程。 Mail.Send只是一个示例场景。
谢谢。
答案 0 :(得分:44)
NO!
不需要处理Thread对象(BETWEEN,Thread类不提供Dispose方法)。
答案 1 :(得分:7)
当程序结束时,线程被放弃 所以不,你没必要这样做,没有必要(也许我认为)。
答案 2 :(得分:1)
好吧,您的SmtpClient
应为Dispose()
。我使用任务并行库而不是创建原始线程:
public static void Send(this MailMessage email)
{
if (!isInitialized)
Initialize(false);
//smtpClient.SendAsync(email, "");
email.IsBodyHtml = true;
Task.Factory.StartNew(() =>
{
// Make sure your caller Dispose()'s the email it passes in at some point!
using (SmtpClient client = new SmtpClient("smtpserveraddress"))
{
client.Send(email);
}
});
}