我们公司为 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();
}
// ...
}
}
所以问题是,在 DoConnect() 例程中抛出了一个 SocketException(而不是被捕获)。我会假设,捕获(异常 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)
}
该文档确认 SocketException 扩展了 Exception。出现的堆栈跟踪是:
TcpClient.Connect() -> DoConnect() -> timClock_TimerCallback
所以异常不会在 try/catch 块之外抛出。
任何想法为什么它不起作用?