У меня есть приложение, которое загружает файлы на сервер с помощью 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);
}
Обратите внимание, что поток не будет блокировать на Upload больше, так что я бы рекомендовал использовать:
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'' –