Ho un'app che carica i file sul server utilizzando il webclient. Mi piacerebbe visualizzare una barra di avanzamento mentre il caricamento del file è in corso. Come potrei fare per raggiungere questo?Ottenere il progresso del caricamento durante il caricamento di file utilizzando Webclient.Uploadfile
13
A
risposta
18
WebClient.UploadFileAsync ti consentirà di farlo.
WebClient webClient = new WebClient();
webClient.UploadFileAsync(address, fileName);
webClient.UploadProgressChanged += WebClientUploadProgressChanged;
...
void WebClientUploadProgressChanged(object sender, UploadProgressChangedEventArgs e)
{
Console.WriteLine("Upload {0}% complete. ", e.ProgressPercentage);
}
Nota che il filo non bloccherà su Upload più, quindi mi consiglia di utilizzare:
webClient.UploadFileCompleted += WebClientUploadCompleted;
...
void WebClientUploadCompleted(object sender, UploadFileCompletedEventArgs e)
{
// The upload is finished, clean up
}
2
Aggiungi il gestore di eventi a WebClient.UploadProgressChanged e chiama WebClient.UploadFileAsync.
Vedere la documentazione WebClient.UploadProgressChanged per un esempio.
Grazie. Sto lavorando con il multithreading, il caricamento del file è già in esecuzione su un thread diverso. Quindi dovrei usare solo il metodo Uploadfile o il metodo UploadfileAsync? –
Avrai ancora bisogno di UploadFileAsync Ho paura, il thread bloccherà una chiamata a UploadFile in modo che quegli eventi non vengano mai chiamati. È possibile ricreare il proprio blocco impostando un flag bool quando si avvia il caricamento, resettandolo in upload completo, quindi thread.sleep fino a quando il flag non viene cancellato. –
nota: l'evento '' 'UploadProgressChanged''' non funziona bene con il metodo' '' UploadDataAsync''' –