Reputation: 987
I have the following code:
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);
I want the mail sending to be done in the background without interfering with the main thread. I do not care when it is finished.
Do I need to somehow handle the dispose of the created thread (mailThread)? Or does it automatically dispose when it finishes its job?
Please do not recommend the SendAsync method. I would like to create the thread manually. Mail.Send was only an example scenario.
Thank you.
Upvotes: 47
Views: 57345
Reputation: 57583
Thread is diposed when its routine comes at end.
So NO, you don't have to do it, it's not necessary (nor possible I think).
Upvotes: 14
Reputation: 20157
Well, your SmtpClient
should be Dispose()
'd. I'd use the Task Parallel Library instead of creating raw threads:
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);
}
});
}
Upvotes: 1
Reputation: 5340
NO!
there is no need to dispose the Thread object (BTW, the Thread class does not provide the Dispose method).
Upvotes: 69