线程会自动关闭吗?

时间:2010-12-28 07:56:20

标签: 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 SendMessageThreaded()
{
    try
    {
        if (Notification.message != "")
            RC.Gmail.GmailMessage.SendFromGmail("accname", "accpass", "email", "subject", Notification.message);

        Notification.message = "";
    }
    catch
    { }
}

所以在SendMessageThreaded运行之后,它会自行关闭还是必须

t.Start()
t.Abort()

还是什么?

7 个答案:

答案 0 :(得分:26)

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

在大多数情况下你不需要明确地清理线程(例如,除非你想提前拯救)

答案 1 :(得分:7)

是的,线程自行关闭。

这就是调用了在secodn线程上运行的方法中的所有指令的时候。

答案 2 :(得分:7)

是,绝对。它会在结束时自行关闭。

答案 3 :(得分:6)

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

是的,它会自动关闭。

答案 4 :(得分:5)

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

答案 5 :(得分:1)

Abort()方法抛出一个你可以处理的ThreadAbortException

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

使用

t.Abort(myObject)

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

答案 6 :(得分:1)

是的它会关闭,但你应该超时,以避免僵尸,如果主线程崩溃,而第二个线程正在等待它。