Как поймать исключение, выброшенное из события? - PullRequest
0 голосов
/ 15 апреля 2011

Я портирую TCPClient в Silverlight и вижу, что BeginConnect может как-то вызвать исключение SocketException из асинхронного процесса.
В silverlight есть событие Completed для функции ConnectAsync, которая предоставляет SocketError в свой параметр SocketAsyncEventArgs.
Я выбрасываю новое исключение SocketException всякий раз, когда сокету не удается подключиться из метода, который моя реализация TCPClient подключила к событию Completed.
Проблема лежит здесь:

try
{
    var ar = client.BeginConnect(...);
    // Do stuff
    client.EndConnect(ar);

}
catch(SocketException e)
{
    // Handle exception here
}

Исключение не будет поймано здесь из-за того, что оно выброшено из события? Или, может быть, это потому, что событие выполняется в другом потоке? Я не уверен. В любом случае исключение не поймано.

Ответы [ 2 ]

0 голосов
/ 15 апреля 2011

Вы должны сделать лямбду, чтобы зафиксировать ошибки, как показано здесь:

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

0 голосов
/ 15 апреля 2011

Что ж, это не дает прямого ответа на ваш вопрос, но если ни у кого нет лучшего решения, вы можете создать свой собственный поток и сделать Connect вместо BeginConnect.Тогда вы сможете поймать исключение.

...