如何杀死主线程?

问题描述:

奇怪的问题。我杀死了主线程,但是当程序结束时,它仍然在this.Close()之后处理代码。如何杀死主线程?

有关如何阻止该问题的任何想法?

MessageBox.Show("Servers overloaded. Exiting."); 
this.Close(); 
//...other code that processes even after it closes... 
+1

你是如何杀死主线程的? Thread.Abort的()? – 2010-02-21 19:57:23

+1

WPF?的WinForms? Asp.net? – Oded 2010-02-21 19:57:30

+0

其桌面应用程序。我使用this.Close()来杀死主线程。我只有一个线程在运行。 – 2010-02-21 19:58:39

与ASP.Net的Response.End(),要求Close不会中止线程。

您需要在致电Close()后添加return;退出该方法。

+0

但是这引发了一个问题,如果你不想执行它,为什么在Close()方法后面有任何代码?在Close()之后放置返回将导致编译器警告关于无法访问的代码。 – Josh 2010-02-21 20:16:02

+0

虽然我不认为这是更好的方法,但它不会回答这个问题... – 2010-02-21 20:21:18

关闭窗口不会停止线程。可以使用Environment.Exit立即关闭。

+2

不,你不应该这样做。你应该调用'Close'和'return'来执行优雅的退出。 – SLaks 2010-02-21 20:00:03

+1

你不应该,但是OP问如何杀死主线程。关闭并返回不这样做。 (实际上也不中止)。据我所知,立即杀死主线程的唯一(管理)方式是立即终止进程。 – Josh 2010-02-21 20:14:02

+0

我没有说这是一个好主意 - 但这是实际杀死它的正确方法。 – 2010-02-21 20:18:53

为什么会停在Close()?它仍然会退出你的方法 - 大多数事情如Close()将涉及发送一些东西到Windows消息队列并进行处理。如果你需要退出NOW,那么也许Environment.FailFast ...