C# 线程是否自动关闭?

C# 线程是否自动关闭?,c#,multithreading,C#,Multithreading,我使用gmail类,这样我的应用程序就可以通过gmail向我发送通知 它是这样做的: public static void SendMessage(string message) { Notification.message = message; Thread t = new Thread(new ThreadStart(SendMessageThreaded)); t.Start(); } private static void SendMessageThreade

我使用gmail类,这样我的应用程序就可以通过gmail向我发送通知

它是这样做的:

public static void SendMessage(string message)
{
    Notification.message = message;

    Thread t = new Thread(new ThreadStart(SendMessageThreaded));
    t.Start();
}
private static void SendMessageThreaded()
{
    try
    {
        if (Notification.message != "")
            RC.Gmail.GmailMessage.SendFromGmail("accname", "accpass", "email", "subject", Notification.message);

        Notification.message = "";
    }
    catch
    { }
}
线程函数如下所示:

public static void SendMessage(string message)
{
    Notification.message = message;

    Thread t = new Thread(new ThreadStart(SendMessageThreaded));
    t.Start();
}
private static void SendMessageThreaded()
{
    try
    {
        if (Notification.message != "")
            RC.Gmail.GmailMessage.SendFromGmail("accname", "accpass", "email", "subject", Notification.message);

        Notification.message = "";
    }
    catch
    { }
}
所以在运行
SendMessageThreaded
之后,它是自动关闭还是必须关闭

t.Start()
t.Abort()

还是什么?

是的,线程是自动关闭的


也就是说,在secodn线程上运行的方法中的所有指令都已被调用。

该线程将超出范围,并在
SendFromGmail
完成后立即可用于垃圾收集


因此,是的,它会自动关闭。

线程需要启动一次,此时它将执行分配给它的代码块并退出

在大多数情况下,您不需要显式清理线程(例如,除非您想提前退出)

Abort()方法抛出一个您可以处理的错误:

public void SendMessageThreaded()
{
    try
    {
        // thread logic
    }
    catch (ThreadAbortException tae)
    {
        // thread was aborted, by t.Abort()
    }
    catch (Exception ex)
    {
        // other error
    }
}
利用

t.Abort(myObject)

您可以“发送”任何帮助您处理中止处理的对象。您可以使用属性访问该对象。

无需,它将返回到线程池并等待其他任务,如果没有,它将自行终止。

是的,当然。当它结束时,它会自动关闭。

是的,它会关闭,但是如果主线程在第二个线程等待时崩溃,您应该只需要一个超时,以避免僵尸