2010-02-21 187 views
4

奇怪的問題。我殺死了主線程,但是當程序結束時,它仍然在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

回答

3

與ASP.Net的Response.End(),要求Close不會中止線程。

您需要在致電Close()後添加return;退出該方法。

+0

但是這引發了一個問題,如果你不想執行它,爲什麼在Close()方法後面有任何代碼?在Close()之後放置返回將導致編譯器警告關於無法訪問的代碼。 – Josh 2010-02-21 20:16:02

+0

雖然我不認爲這是更好的方法,但它不會回答這個問題... – 2010-02-21 20:21:18

8

關閉窗口不會停止線程。可以使用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

2

爲什麼會停在Close()?它仍然會退出你的方法 - 大多數事情如Close()將涉及發送一些東西到Windows消息隊列並進行處理。如果你需要退出NOW,那麼也許Environment.FailFast ...