线程会自动关闭吗?

我使用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() 

或者其他的东西?

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

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

是的,线程本身是关闭的。

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

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

一旦SendFromGmail完成,该线程将超出范围并可用于垃圾收集。

所以是的,它会自动关闭。

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

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属性来访问该对象。

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