41

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.

4

3 回答 3

63

NO!

there is no need to dispose the Thread object (BTW, the Thread class does not provide the Dispose method).

于 2012-05-22T08:07:11.080 回答
13

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).

于 2012-05-22T08:08:12.160 回答
2

好吧,你SmtpClient应该是Dispose()'d。我会使用任务并行库而不是创建原始线程:

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);
        }
    });
}
于 2014-01-12T21:43:39.143 回答