2009-06-11 2 views

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 
} 
+0

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

+0

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

+0

nota: l'evento '' 'UploadProgressChanged''' non funziona bene con il metodo' '' UploadDataAsync''' –