2011-09-09 66 views
3

在C#windows應用程序中,我編寫了代碼來顯示所有異常。我嘗試了下面的代碼。當以追蹤模式運行(按F5)時,它工作正常(我已經編寫了我創建了例外的UI事件函數)。但是當我運行獨立的exe文件時,它並沒有發現異常。相反,它會顯示爲未處理的異常。Windows應用程序c中的異常處理#

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

有人知道嗎?

+0

感謝賈斯汀。你是對的。這回答了我的問題 –

回答

0

我通常用這種方法去:

static void Main() 
{ 
    Application.ThreadException += ExceptionHandler; 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleTextRenderingDefault(false); 
    Application.Run(new MainForm()); 
} 

static void ExceptionHandler(object sender, ThreadExceptionEventArgs e) 
{ 
    const string errorFormat = @"some general message that a error occured"; 

    //error logging, usually log4.net 

    string errMessage = string.Format(errorFormat, e.Exception.Message, e.Exception.StackTrace) 
    DialogResult result = MessageBox.Show(errMessage, "Error", MessageBoxButtons.YesNo, MessageBoxIcon.Error); 

    if (result == DialogResult.No) 
    { 
    Application.Exit(); 
    } 
} 

這顯示異常的消息和堆棧跟蹤信息給用戶,並要求終止應用程序。這在測試場景或內部應用程序中非常有用,但在野外發布詳細的消息堆棧跟蹤通常是一個壞主意。

0

嘗試添加UnhandledException處理程序:

AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler((o, e) => { 

     Exception theException = (Exception)e.ExceptionObject; 

     /* CODE TO SHOW/HANDLE THE EXCEPTION */ 
     Debug.WriteLine(theException.Message); 
}); 
相關問題