我正在使用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()
还是什么?
答案 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)
是的它会关闭,但你应该超时,以避免僵尸,如果主线程崩溃,而第二个线程正在等待它。