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); 
} 

Обратите внимание, что поток не будет блокировать на Upload больше, так что я бы рекомендовал использовать:

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'' –