Application.Exit();//好像只在主線程可以起作用,而且當有線程,或是阻塞方法的情況下,很容易失靈
this.Close();//只是關閉當前窗體。
Application.ExitThread();//退出當前線程上的消息循環,並關閉該線程上的所有窗口。 也會失靈
Environment.Exit(0); //前面三種方法都不能很好的退出程序,此方法可以完全退出程序,這個要強制得多。
Process.GetCurrentProcess().Kill();//此方法完全奏效,絕對是完全退出
另:
1,將主線程設置爲後臺進程。方法是將主線程的isBackground = true。據說,這樣在關閉主程序時後關閉主線程,並關閉所有的線程。
2,有人列出了c#程序退出的幾種方法:
(1)Application.Exit()//好像只在主線程可以起作用,而且當有線程,或者是阻塞方法的情況下,很容易失靈。
(2) System.Environment.Exit(0) //無論在主線程或其它線程,都可以吧程序結束乾淨
(3)Application.ExitThread();
但是我發現(2)這個方法在.netFrame Work compact下是沒有的我這樣
最後我的解決辦法是:強制退出程序進程。代碼如下:
System.Diagnostics.Process tt = System.Diagnostics.Process.GetProcessById(System.Diagnostics.Process.GetCurrentProcess().Id);
tt.Kill();
當然,這種方法很暴力。良好的程序設計應該是,所有的線程都有條件可以結束循環以退出(包括timer)。在程序退出時觸發所有線程的終止條件。
來源:http://www.itokit.com/2011/0916/69413.html