2011-01-20 16 views
21

據我所知,有幾個方法可以退出應用程序,如Application.Exit(),Application.ExitThread(),Environment.Exit()等通用的方式退出.NET應用程序

我有一個外部的「commons」庫,我試圖創建一個通用的FailIf方法,將失敗記錄到日誌中,做到這一點,那麼,這和那個,然後最終退出應用程序...這是一個簡短的版本它。

public static void FailIf(Boolean fail, String message, Int32 exitCode = 1) 
    { 
     if (String.IsNullOrEmpty(message)) 
      throw new ArgumentNullException("message"); 

     if (fail) 
     { 
      //Do whatever I need to do 

      //Currently Environment.Exit(exitCode) 
      Environment.Exit(exitCode); 
     } 
    } 

我已閱讀,使用Environment.Exit不是處理事情的最好方式,當涉及到的WinForm的應用程序,並且還與WPF應用程序和Silverlight中工作時有不同的方式來退出...我問題是:

我該如何妥善退出以涵蓋所有應用程序類型?

+3

難道你不能簡單地拋出一個異常,而不是做顯然是斷言? – 2011-01-20 20:49:00

回答

25

閱讀這篇關於使用環境和應用程序之間的區別:

Application.Exit Vs Environment.Exit

還有的要在該頁面的底部做一​​個例子:

if (System.Windows.Forms.Application.MessageLoop) 
{ 
    // Use this since we are a WinForms app 
    System.Windows.Forms.Application.Exit(); 
} 
else 
{ 
    // Use this since we are a console app 
    System.Environment.Exit(1); 
} 
+0

這也是WPF應用程序的帳號嗎? – michael 2011-01-20 20:55:40

+0

WPF應用程序通常以.Run()命令啓動(是) – 2011-01-20 21:00:54

0

我會建議使用基本的異常處理,所以而不是System.Environment.Exit(1)拋出新的ApplicationException(消息),這種異常向主方法冒泡,在你的情況下是這樣的:

try{ 
Application.Run(new MyForm()); 
} 
catch(ApplicationException){ 
// do custom cleanup/reporting 
} 

只要確保你在主線程拋出異常,否則調用它扔ofcourse

2

之前,如果它只是一箇中斷,使用Environment.Exit()。如果它非常重要(無法處理任何清理),請使用Environment.FailFast()