捕获全局异常是处理重新连接的好方法吗?

时间:2012-04-06 13:59:58

标签: c# wpf

我有一个不断增长的应用程序,它有多个用户控件,窗口等,它们都在程序打开时建立的套接字上发送大量数据(登录服务器)。如果服务器死了或者沿着这些方向发生了什么,我希望能够以更优雅的方式处理随后的SocketException,而不是在try-catch语句中为这个特定的异常包装几乎每个代码块。

void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)

使用它应该捕获任何被抛出的未处理异常,简单地检查异常是否是socketexception然后启动“你已断开连接,请重新连接”代码是一个坏主意吗?使用此应用程序,您可以安全地假设因为服务器断开连接而导致的任何socketexception的99%。

虽然我正在讨论这个主题,但是在知道如何检查异常类型之后你知道怎么办?使用上面的代码,我可以使用e.Exception简单地获取原始异常。我不确定如何用if语句来检查异常的类型。

3 个答案:

答案 0 :(得分:4)

恕我直言,这是一个非常糟糕的主意......

更好的解决方案是将访问套接字的代码移动到自己的类中......应用程序中需要与服务器交互的任何内容都要通过该类...这样任何与套接字相关的异常都可以相应地处理在一个中心位置。

答案 1 :(得分:1)

Using that should catch any unhandled exception that gets thrown

抓住所有例外情况,你可以做的很少,这不是一个好主意。

Eric Lippert has a very good article on what exception is handled.

我同意Yahia,访问Socket的代码移动到了自己的类。

public class SocketHandling
{

 //if Something goes wrong, throw exception. It is up to the caller how to handle the exception.
}

main()
{
  try
{

}

catch(SocketRelatedException)
{
  //handle the exception.
}
}

答案 2 :(得分:0)

我不认为检查异常类型是不好的做法。

catch(Exception ex) 
            {
            if (ex is System.Net.Sockets.SocketException)
                {
                    doSomething(ex);
                }
            else 
              throw;

            }

此外,您可以捕获特定的异常类型......