如何捕获事件引发的异常?
问题描述:
我正在将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来捕获错误,如下所示:
+0
的错误是OnCompleted事件中处理,而不是在主线程上。 – 2011-04-15 20:19:58
是的,但是这不是这里的想法:) – 2011-04-15 20:18:54