2009-06-11 2 views

답변

18

WebClient.UploadFileAsync이 작업을 수행 할 수 있습니다.

WebClient webClient = new WebClient(); 
webClient.UploadFileAsync(address, fileName); 
webClient.UploadProgressChanged += WebClientUploadProgressChanged; 

... 스레드가 더 이상 업로드를 차단하지 않습니다, 그래서 사용하는 것이 좋습니다 거라고

void WebClientUploadProgressChanged(object sender, UploadProgressChangedEventArgs e) 
{ 
     Console.WriteLine("Upload {0}% complete. ", e.ProgressPercentage); 
} 

참고 :

webClient.UploadFileCompleted += WebClientUploadCompleted; 

...

void WebClientUploadCompleted(object sender, UploadFileCompletedEventArgs e) 
{ 
    // The upload is finished, clean up 
} 
+0

감사합니다. 나는 멀티 쓰레딩과 함께 일하고 있는데, 파일 업로드는 이미 다른 스레드에서 실행 중이다. 그래서 그냥 Uploadfile 메서드 나 UploadfileAsync 메서드를 사용해야합니까? –

+0

당신은 여전히 ​​UploadFileAsync가 필요할 것입니다. 두려워요. 그 스레드는 결코 UploadFile에 대한 호출을 차단하여 그 이벤트가 절대 호출되지 않을 것입니다. 업로드를 시작할 때 bool 플래그를 설정하고 uploadcomplete에서 재설정 한 다음 플래그가 지워질 때까지 thread.sleep을 설정하여 자신의 블로킹을 다시 만들 수 있습니다. –

+0

참고 :'''UploadProgressChanged''' 이벤트는''''UploadDataAsync''' 메소드와 잘 작동하지 않습니다. –

2

WebClient.UploadProgressChanged에 이벤트 처리기 추가 WebClient.UploadFileAsync를 호출하십시오.

예제는 WebClient.UploadProgressChanged 설명서를 참조하십시오.