2009-07-23 85 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

感谢您的回答......我猜在一些倾销堆栈日志文件,并显示用户唯一友好的信息将在我的情况:)