2010-07-16 3 views
1

У меня есть следующий код, чтобы загрузить двоичный файл из Интернета:WebClient.DownloadDataAsync SocketException сбой мое приложение

WebClient client = new WebClient(); 
client.DownloadDataCompleted += new DownloadDataCompletedEventHandler(DownloadDataCompleted); 
client.DownloadDataAsync(uri); 

Все хорошо работает до тех пор, пока соединение не будет разорван. Если отключить мои беспроводной, приложение вылетает из:

System::Windows::Forms::Application::ThreadException event occured 
SENDER: System.Threading.Thread 
EXCEPTION: System.Net.Sockets.SocketException 
MESSAGE: A socket operation was attempted to an unreachable network 74.200.243.250:80 
SOURCE: System 
CALL STACK 
    at System.Net.Sockets.Socket.EndConnect(IAsyncResult asyncResult) 
    at System.Net.ServicePoint.ConnectSocketInternal(Boolean connectFailure, Socket s4, Socket s6, Socket& socket, IPAddress& address, ConnectSocketState state, IAsyncResult asyncResult, Int32 timeout, Exception& exception) 

Как поймать это исключение, или, так как это на его собственный потоке, как я остановить его от падения моего приложения?

ответ

2

В вашем методе DownloadDataCompleted проверьте свойство ошибки аргумента. Это заселяется, если в ходе асинхронной операции есть исключение. В этом методе обработайте исключение соответствующим образом.

Он похож на RunWorker, выполненный BackgroundWorkerCompleted.

http://msdn.microsoft.com/en-us/library/system.componentmodel.asynccompletedeventargs.error.aspx

+0

Ха, это было намного проще, чем я думал. –

+0

Но здесь странно, что это исключение фактически вызывает выброс и сбой приложения. Если предполагается, что исключения только накапливаются в свойстве .Error, когда вы действительно получите бросок и сбой приложения? –

1

Я не знаю, почему это происходит сбой приложения. DownloadDataCompletedEventArgs имеет свойство Error, которое является исключением, которое было выбрано во время операции async.

Смежные вопросы