线程会自动关闭吗?
我使用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属性来访问该对象。
是的,它会关闭,但你应该超时,以避免僵尸,如果主线程崩溃,而第二个线程正在等待它。