如何捕获从事件抛出的异常



我正在将TCPClient移植到Silverlight中,我看到BeginConnect可以从异步进程中抛出SocketException。
在silverlight中,ConnectAsync函数有一个Completed事件,它在SocketAsyncEventArgs参数中提供一个SocketError。
每当套接字无法从我的TCPClient实现方法连接到Completed事件时,我都会抛出一个新的SocketException。
问题在这里:

try
{
    var ar = client.BeginConnect(...);
    // Do stuff
    client.EndConnect(ar);
}
catch(SocketException e)
{
    // Handle exception here
}

异常不会被捕获,因为它是从事件抛出的事实?或者可能是因为事件在另一个线程上执行?我不确定。在任何情况下都不会捕获异常。

好吧,这并不能直接回答你的问题,但如果没有人有更好的解决方案,你可以创建自己的线程并做Connect而不是BeginConnect。然后,您应该能够捕获异常。

您应该执行lambda来捕获错误,如下所示:

http://social.msdn.microsoft.com/Forums/hu-HU/csharpgeneral/thread/0fbe2ebd-a576-4ac5-a1ed-a5d13d0cd9c8

最新更新