1

我有一个不断增长的应用程序,其中包含多个用户控件、窗口等,它们都通过在程序打开(登录服务器)时建立的套接字发送大量数据。如果服务器死机或类似的事情,我希望能够以更优雅的方式处理随后的 SocketException,而不是将几乎每个代码块包装在针对该特定异常的 try-catch 语句中。

void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)

使用它应该捕获任何抛出的未处理异常,简单地检查异常是否是套接字异常然后启动“您已断开连接,请重新连接”代码是不是一个坏主意?使用这个应用程序,您可以放心地假设任何抛出的套接字异常中有 99% 是由于服务器断开连接造成的。

当我谈到这个主题时,知道在异常类型已经被捕获后如何检查它吗?通过上面的代码,我可以简单地用 e.Exception 得到原始异常。我不确定如何用 if 语句来检查异常的类型。

4

3 回答 3

4

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

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

于 2012-04-06T14:04:07.930 回答
1
Using that should catch any unhandled exception that gets thrown

捕捉所有的例外,你可以做的很少不是一个好主意。

Eric Lippert 有一篇关于处理什么异常的非常好的文章。

我同意 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.
}
}
于 2012-04-06T14:37:06.443 回答
0

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

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

            }

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

于 2012-04-06T14:06:01.487 回答