【发布时间】:2012-11-11 11:39:31
【问题描述】:
我有一个包含 Phone 对象的类。
电话是虚拟电话,在我的类的构造函数中,我传入了我希望连接的虚拟电话的 IP 地址和端口。
在构造函数中,然后我运行一个名为Connect 的方法。在 Connect 方法中,我从电话的 IP 地址/端口组合中实例化一个 IPEndPoint 对象,然后实例化一个 Socket 对象,然后运行 Socket 对象的 Connect 方法,传入我的 IPEndPoint 作为参数。
如果电话服务器没有为特定电话(不是我的工作)正确配置,则连接被拒绝,并抛出 SocketException。我正在尝试捕捉这个异常。
这是一个 Windows 窗体应用程序。在 Form 对象的范围内,但在任何构造函数/方法的范围之外,我将手机作为未实例化的私有字段,就像这样(iPhone 是我手机使用的接口):
private IPhone _phone;
我有一个名为 SetupPhone 的方法,我在这里实例化我的手机对象,并试图在此处捕获异常:
private void SetupPhone()
{
try
{
_phone = new Phone(AgentDetails.IPAddress, AgentDetails.Port);
}
catch(SocketException ex)
{
Log.LogException("Error mapping phone to port", ex);
ShowBaloonTip("An error occured starting CTI. Please select your name from the list to try again", ToolTipIcon.Error);
ChangeUser();
return;
}
//Subscribe to Phone events here
}
这里是电话对象的构造函数:
public Phone(string ipAddress, int port, string password = "FooBar")
{
Connect(ipAddress, port, password);
}
这里是 Connect 方法:
public void Connect(string ipAddress, int port, string password)
{
_phone = new IPEndPoint(IPAddress.Parse(ipAddress), port);
_socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
_socket.Connect(_phone);
//Redacted
}
在未正确配置的手机上,我的 SocketException 如下所示:
我是否认为对象构造函数中运行的任何方法引发的任何异常都应该被放置在该对象实例化周围的 try/catch 块安全地捕获?还是不是这样?我想捕捉实例化我的对象时可能发生的任何错误,这不可能吗?
【问题讨论】:
-
您是否尝试过捕获异常以查看会发生什么?
-
@activwerx 是的,我试过捕捉异常,同样的事情发生了。
-
您是否在其他地方处理异常?也许它被抓到了更高的水平或什么?
-
Nesim 解决了它,我不久前更改了我的 VS 异常设置,因此我可以调试在其他线程上抛出的异常,这就是现在导致我的问题的原因!
标签: c# error-handling