2010-07-16 7 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 메서드에서 인수의 Error 속성을 확인하십시오. 비동기 조작 중에 예외가 있으면 채워집니다. 이 메서드로 예외를 적절히 처리합니다.

이것은 BackgroundWorker의 RunWorkerCompleted와 비슷합니다.

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

+0

하하, 생각보다 훨씬 쉬웠습니다. –

+0

하지만 이상한 점은이 예외가 실제로 던져지고 응용 프로그램이 충돌한다는 것입니다. 예외가 .Error 속성에서 발생한 것으로 가정하면, 실제로 예외가 던져지고 응용 프로그램이 중단되는 시점은 언제입니까? –

1

나는이 응용 프로그램을 충돌하는 이유를 모르겠어요. DownloadDataCompletedEventArgs에는 비동기 작업 중에 throw 된 예외 인 Error 속성이 있습니다.

관련 문제