Do we need to dispose or terminate a thread in C# after usage?

47,753

Solution 1

NO!

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

Solution 2

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

Solution 3

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);
        }
    });
}
Share:
47,753
Aaron Azhari
Author by

Aaron Azhari

Updated on July 09, 2022

Comments

  • Aaron Azhari
    Aaron Azhari 11 months

    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.