C# 线程是否自动关闭?
我使用gmail类,这样我的应用程序就可以通过gmail向我发送通知 它是这样做的: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
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)
您可以“发送”任何帮助您处理中止处理的对象。您可以使用属性访问该对象。无需,它将返回到线程池并等待其他任务,如果没有,它将自行终止。是的,当然。当它结束时,它会自动关闭。是的,它会关闭,但是如果主线程在第二个线程等待时崩溃,您应该只需要一个超时,以避免僵尸