Download file in C#
Ebbene si, questa categoria non è morta, anche se non ci scrivo da tempo.
Purtroppo non riesco a seguire tutti i linguaggi come vorrei...
Oggi vediamo due metodi per fare il download dei file dal web, uno sincrono e uno asincrono, in C#.
In entrambi i casi useremo l'oggetto WebClient.
Cominciamo dal primo:
using System;
using System.Net;namespace Cimoda
{
public class Download
{
public static void downloadSync()
{
var webClient = new WebClient();
webClient.DownloadFile("http://www.sito.com/file.xml", @"C:\file.xml");
}
}
}
Come vedete basta usare il metodo DownloadFile, indicando il file da scaricare e dove scaricarlo.
Questo metodo, però, viene eseguito nel thread principale, ed è quindi bloccante.
Possiamo quindi usare un metodo asincrono; ecco un esempio di base:
using System;
using System.Net;namespace Cimoda
{
public class Download
{
public static void downloadAsync()
{
var webClient = new WebClient();
webClient.DownloadFileAsync(new Uri("http://www.sito.com/file.xml"), @"C:\file.xml");
}
}
}
In questo caso usiamo il metodo DownloadFileAsync, che prende come primo parametro un oggetto Uri e non uno string; il secondo rimane uguale.
Possiamo ottenere di più, però, se vogliamo:
private static void OnButtonDownloadClick(object sender, EventArgs e)
{
WebClient webClient = new WebClient();
webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
webClient.DownloadFileAsync(new Uri("http://www.sito.com/file.xml"), @"C:\file.xml");
}private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}private void Completed(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("Download completed!");
}
In questo caso riempiamo una progress bar (che dovete aggiungere alla vostra finestra) durante l'esecuzione, e alla fine lanciamo un MessageBox.
Nel complesso tutto molto semplice!
Ciao!
c# c sharp downloadfile downloadfileasync webclient messagebox
Commentami!