2009-07-23 62 views
2

我正在開發一個winforms應用程序,我想知道什麼是異常處理的最佳做法。每當發生異常時,我打開一個異常對話框,顯示必要的信息,即消息和堆棧跟蹤。我所遇到的主要困惑是,如果我希望用戶只看到友好的消息,但同時確保開發人員能夠獲得調試所需的數據。做這個的最好方式是什麼?異常處理和用戶友好的消息

回答

2

我沒有親自使用它,但Red Gate's Exception Hunter看起來像一個很酷的工具。您最好的選擇可能是將錯誤記錄到磁盤,以便在有人需要查看時提供該錯誤,但不會以用戶的方式出現。如果你願意,你可以打開一個窗口,要求用戶通過你的網站向你提交異常信息和堆棧跟蹤信息(只需單擊確定)。避免發送私人信息,這可能意味着不發送參數值。

編輯:哦,避免說「異常和堆棧跟蹤」。說「發生了錯誤,但在您的幫助下,我們可以更快地修復它,您是否希望現在自動將錯誤信息發送給____?請注意,錯誤報告中不會傳輸任何個人信息,您可以點擊'詳細信息'以顯示報告的完整信息。「如果他們點擊詳細信息,則垂直展開窗口以顯示包含數據的只讀文本框。

0
catch (Exception ex) 
{ 
    cApp.DB.LogException(ex); 
    Messagebox.Show(...); 
} 

cApp.DB.LogException(ex)記錄到數據庫表,除非數據庫關閉然後將其添加到一個文本文件中。

0

我有一個實用程序方法,我用在WinForms中編寫的實用程序中。隨着一點點的關心,它可能會在生產的WinForms應用中是有用的(讓專家沒有放過他們的批評):

便利重載:

private void PerformUIAction(Action action) 
{ 
    PerformUIAction(action, (string) null); 
} 

private void PerformUIAction(Action action, string message) 
{ 
    PerformUIAction(action,() => message); 
} 

真正的一個:

private void PerformUIAction(Action action, Func<string> messageHandler) 
{ 
    var saveCursor = Cursor; 
    Cursor = Cursors.WaitCursor; 
    try 
    { 
     action(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show(
      messageHandler() ?? ex.Message, 
      "Exception!", 
      MessageBoxButtons.OK, 
      MessageBoxIcon.Error, 
      MessageBoxDefaultButton.Button1, 
      MessageBoxOptions.DefaultDesktopOnly); 
     // Replace with logging code. The important part is ex.ToString(), 
     // not ex.Message 
     Debug.WriteLine(ex.ToString(), "Exception"); 
     throw; 
    } 
    finally 
    { 
     Cursor = saveCursor; 
    } 
} 

例使用:

private void _samplesMenu_AfterSelect(object sender, TreeViewEventArgs e) 
{ 
    PerformUIAction(
     delegate 
      { 
       // Do the real work of the event in here. 
       // You can reference sender and e 
      }, 
     delegate 
      { 
       return string.Format(
        "Error while processing action {1} for node {0}", 
        e.Node.FullPath, e.Action); 
      }); 
} 
+0

這是不同於簡單的嘗試趕上?您正在將一種語言結構更改爲另一種語言以產生相同的效果。 – nawfal 2013-02-01 20:20:04

0

感謝您的回答......我猜在一些傾銷堆棧日誌文件,並顯示用戶唯一友好的信息將在我的情況:)