Hier ein Beispiel für einen asynchronen Download mit Fortschrittszeige in C#. Der aktuelle Status wird in Form einer Progress-Bar angezeigt.
Für den Download verwenden wir die WebClient-Klasse:
WebClient client = new WebClient();
client.DownloadFileAsync(new Uri("http://www.schneuse.de/download.zip), "c:\\download.zip");
Da wir uns über den Fortschritt informieren lassen wollen, fügen wir zwei EventHandler hinzu:
client.DownloadProgressChanged += Client_DownloadProgressChanged;
client.DownloadFileCompleted += Client_DownloadFileCompleted;
Der erste für den Fortschritt:
private void Client_DownloadProgressChanged(object sender, System.Net.DownloadProgressChangedEventArgs e)
{
double bytesIn = double.Parse(e.BytesReceived.ToString());
double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
double percentage = bytesIn / totalBytes * 100;
progressBar.Value = int.Parse(Math.Truncate(percentage).ToString());
}
Der zweite für den Abschluss des Downloads:
private void Client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("Download fertig!");
}
Das wars auch schon. Wie man sieht funktioniert das recht einfach und problemlos. Die asynchrone Ausführung erledigt C# im Hintergrund.