如何在C#程序中处理未处理的异常

时间:2014-05-19 18:00:45

标签: c# user-interface exception-handling

我正在编写一个关于C#的程序,我刚刚开始使用Exception。我之前已经完成了Java,但我试图不惜一切代价避免异常。我现在明白,我不能再避免它了。所以我需要一些建议。我有这样的代码:

try
{
    //...
}
catch
{
    //...
}

//...

try
{
    //...
}
catch
{
    //...
}

这是一个GUI程序。我想这样做,以便在捕获异常时,程序基本上会停止所有操作,但不会关闭程序,因此GUI仍然存在,用户可以对发现的问题进行更改。

顺便说一句:我们的讲师将因多次退货而失败,因此建议不会发生

2 个答案:

答案 0 :(得分:2)

您可以定义处理程序以捕获所有未处理的异常。确切的机制取决于您使用的UI框架。

对于WinForms,您可以执行类似

的操作
AppDomain.CurrentDomain.UnhandledException += new 
    UnhandledExceptionEventHandler(CurrentDomain_UnhandledException);

// Windows forms exceptions handler
Application.ThreadException += new 
    ThreadExceptionEventHandler(Application_ThreadException);

http://kenneththorman.blogspot.com/2010/10/windows-forms-net-handling-unhandled.html

对于WPF,您可以执行类似

的操作
<Application x:Class="UnhandledExceptionHandler.App"
    DispatcherUnhandledException="Application_DispatcherUnhandledException">
</Application>

private void Application_DispatcherUnhandledException(object sender, 
                       System.Windows.Threading.DispatcherUnhandledExceptionEventArgs e)
{
    // Handle the exception
}

http://www.codeproject.com/Articles/90866/Unhandled-Exception-Handler-For-WPF-Applications

答案 1 :(得分:0)

以防Eric J。的答案过于复杂:

我认为,因为你的教授只允许一个return语句,你将拥有一些服务,它会做一些工作,并通知调用者状态和可能的错误消息。

如果您可以使用布尔消息,那么以下内容应该适用于您:

public class Service
{
  public bool DoWork()
  {
    bool success = false;

    try
    {
      //code to do work
      success = true;
    }
    catch(Exception ex)
    {
      //do something with the ex
      success = false;
    }

    return success;
    }
}