如何捕获事件引发的异常?

问题描述:

我正在将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。然后,你应该能够发现异常。

+0

是的,但是这不是这里的想法:) – 2011-04-15 20:18:54

+0

的错误是OnCompleted事件中处理,而不是在主线程上。 – 2011-04-15 20:19:58