2009-06-29 23 views
20

我使用VSTS 2008 + .Net 3.5 + C#開發Windows Forms應用程序。我的困惑是,似乎Application.Exit不強制應用程序終止?如果不是,我應該調用哪種方法來使應用程序終止?Application.Exit

編輯1:

一般情況下,主要的方法是這樣的,如何正常退出主要功能,而無需調用Environment.Exit?

static void Main() 
    { 
     Application.EnableVisualStyles(); 
     Application.SetCompatibleTextRenderingDefault(false); 
     try 
     { 
      Application.Run(new Form1()); 
     } 
     catch (Exception ex) 
     { 
      Console.WriteLine (ex.Message); 
     } 
    } 

由於事先 喬治

+2

重新您的編輯 - 在您的窗體,只需調用Close(); – 2009-06-29 08:42:45

+0

Marc,我看了你的回覆,但是在哪裏打電話關閉?在Main Main內部或者用代碼調用Application.Exit來替代調用Close的代碼? – George2 2009-06-29 08:56:18

+0

`Environment.Exit(Environment.ExitCode)`有什麼問題? – stackptr 2014-02-23 18:32:17

回答

32

Application.Exit真的只是詢問消息循環非常緩慢。

如果你想讓你的應用退出,最好的方法是優雅地將它從Main中刪除,並乾淨地關閉所有額外的非後臺線程。

如果你想要殘酷...... Environment.ExitEnvironment.FailFastnote這是苛刻的 - 大約就像自殺Process一樣。

+9

偉大的人格化的+1 – colithium 2009-06-29 08:24:32

+0

謝謝馬克,我很困惑如何退出主要功能優雅。我已將我的代碼發佈在編輯1部分的原始文章中。任何想法爲什麼? – George2 2009-06-29 08:38:24

+0

Marc,我看了你的回覆,但是在哪裏打電話關閉?在Main Main內部或者用代碼調用Application.Exit來替代調用Close的代碼? – George2 2009-06-29 08:55:37

4

如果在調用Application.Exit時,您的應用程序沒有正常退出,顯然有一些阻止它這樣做。這可以是任何事件,從FormClosing事件中的表單設置e.Cancel = true到不是仍在運行的後臺線程的線程。我會建議你仔細研究究竟是什麼讓你的過程保持活躍,並以一種很好的方式關閉它。這應該使你的應用程序很好地關閉。

通常,在winforms應用程序中,它應該足以關閉主窗體。

1

我有同樣的問題時,我發現了程序中打開一個新的形式/窗口,只有隱藏了第二種形式(不關閉它),將通過Application.Exit();阻止主窗體正確退出。

在這種情況下有兩種解決方案。首先是簡單地在主窗體上使用Close()而不是Application.Exit()。第二個解決方法是使用下面的代碼:

if (secondForm != null && !secondForm.IsDisposed) secondForm.Dispose(); 
15

嘗試以下操作:

Process.GetCurrentProcess().Kill(); 

Environment.Exit不工作的WinForms和Environment.FailFast拋出自己的異常。

-1

我發現根本,所有你需要做的就是做insted的的application.exit和所有你不得不做的就是把 結束 足夠簡單結束命令關閉它

相關問題