Tar*_*haf 5 c# try-catch socketexception
我们公司为 GUI 应用程序提供网络组件 (DLL)。
它使用计时器来检查断开连接。如果它想重新连接,它会调用:
internal void timClock_TimerCallback(object state)
{
lock (someLock)
{
// ...
try
{
DoConnect();
}
catch (Exception e)
{
// Log e.Message omitted
// Raise event with e as parameter
ErrorEvent(this, new ErrorEventArgs(e));
DoDisconnect();
}
// ...
}
}
Run Code Online (Sandbox Code Playgroud)
所以问题是,在 DoConnect() 例程内部抛出了 SocketException(并且未被捕获)。我认为,catch(异常 e)应该捕获所有异常,但不知何故,SocketException 未被捕获并显示在 GUI 应用程序中。
protected void DoConnect()
{
//
client = new TcpClient();
client.NoDelay = true;
// In the following call the SocketException is thrown
client.Connect(endPoint.Address.ToString(), endPoint.Port);
// ... (login stuff)
}
Run Code Online (Sandbox Code Playgroud)
该文档确认 SocketException 扩展了 Exception。显示的堆栈跟踪是:
TcpClient.Connect() -> DoConnect() -> timClock_TimerCallback
Run Code Online (Sandbox Code Playgroud)
因此异常不会抛出到 try/catch 块之外。
有什么想法为什么它不起作用吗?
我写了一个小程序,但无法重现,在 TimerCallback 中捕获了 SocketException。
所以我建议你重新思考你的分析,问题可能不是你想象的那样。一些建议:
| 归档时间: |
|
| 查看次数: |
2126 次 |
| 最近记录: |