webclient를 사용하여 서버에 파일을 업로드하는 앱이 있습니다. 파일 업로드가 진행되는 동안 진행률 표시 줄을 표시하고 싶습니다. 이것을 달성하려면 어떻게해야합니까?Webclient.Uploadfile을 사용하여 파일 업로드 중 업로드 진행률 얻기
13
A
답변
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
}
2
WebClient.UploadProgressChanged에 이벤트 처리기 추가 WebClient.UploadFileAsync를 호출하십시오.
예제는 WebClient.UploadProgressChanged 설명서를 참조하십시오.
감사합니다. 나는 멀티 쓰레딩과 함께 일하고 있는데, 파일 업로드는 이미 다른 스레드에서 실행 중이다. 그래서 그냥 Uploadfile 메서드 나 UploadfileAsync 메서드를 사용해야합니까? –
당신은 여전히 UploadFileAsync가 필요할 것입니다. 두려워요. 그 스레드는 결코 UploadFile에 대한 호출을 차단하여 그 이벤트가 절대 호출되지 않을 것입니다. 업로드를 시작할 때 bool 플래그를 설정하고 uploadcomplete에서 재설정 한 다음 플래그가 지워질 때까지 thread.sleep을 설정하여 자신의 블로킹을 다시 만들 수 있습니다. –
참고 :'''UploadProgressChanged''' 이벤트는''''UploadDataAsync''' 메소드와 잘 작동하지 않습니다. –