我有一个不断增长的应用程序,它有多个用户控件,窗口等,它们都在程序打开时建立的套接字上发送大量数据(登录服务器)。如果服务器死了或者沿着这些方向发生了什么,我希望能够以更优雅的方式处理随后的SocketException,而不是在try-catch语句中为这个特定的异常包装几乎每个代码块。
void App_DispatcherUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e)
使用它应该捕获任何被抛出的未处理异常,简单地检查异常是否是socketexception然后启动“你已断开连接,请重新连接”代码是一个坏主意吗?使用此应用程序,您可以安全地假设因为服务器断开连接而导致的任何socketexception的99%。
虽然我正在讨论这个主题,但是在知道如何检查异常类型之后你知道怎么办?使用上面的代码,我可以使用e.Exception简单地获取原始异常。我不确定如何用if语句来检查异常的类型。
答案 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;
}
此外,您可以捕获特定的异常类型......