C# Program to Download File From URL With Progressbar GUI Desktop App Full Project For Beginners

  • Post author:
  • Post category:c#
  • Post comments:0 Comments

 

 

download.cs

 

 

using System.Diagnostics;
using System.IO;
using System.Net;

WebClient webClient;               // Our WebClient that will be doing the downloading for us
Stopwatch sw = new Stopwatch();   


public void DownloadFile(string urlAddress, string location)
{
    using (webClient = new WebClient())
    {
        webClient.DownloadFileCompleted += new AsyncCompletedEventHandler(Completed);
        webClient.DownloadProgressChanged += new DownloadProgressChangedEventHandler(ProgressChanged);
 
        // The variable that will be holding the url address (making sure it starts with http://)
        Uri URL = urlAddress.StartsWith("http://", StringComparison.OrdinalIgnoreCase) ? new Uri(urlAddress) : new Uri("http://" + urlAddress);
 
        // Start the stopwatch which we will be using to calculate the download speed
        sw.Start();
 
        try
        {
            // Start downloading the file
            webClient.DownloadFileAsync(URL, location);
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }
}
 
// The event that will fire whenever the progress of the WebClient is changed
private void ProgressChanged(object sender, DownloadProgressChangedEventArgs e)
{
    // Calculate download speed and output it to labelSpeed.
    labelSpeed.Text = string.Format("{0} kb/s", (e.BytesReceived / 1024d / sw.Elapsed.TotalSeconds).ToString("0.00"));
 
    // Update the progressbar percentage only when the value is not the same.
    progressBar.Value = e.ProgressPercentage;
 
    // Show the percentage on our label.
    labelPerc.Text = e.ProgressPercentage.ToString() + "%";
 
    // Update the label with how much data have been downloaded so far and the total size of the file we are currently downloading
    labelDownloaded.Text = string.Format("{0} MB's / {1} MB's",
        (e.BytesReceived / 1024d / 1024d).ToString("0.00"),
        (e.TotalBytesToReceive / 1024d / 1024d).ToString("0.00"));
}
 
// The event that will trigger when the WebClient is completed
private void Completed(object sender, AsyncCompletedEventArgs e)
{
    // Reset the stopwatch.
    sw.Reset();
 
    if (e.Cancelled == true)
    {
        MessageBox.Show("Download has been canceled.");
    }
    else
    {
        MessageBox.Show("Download completed!");
    }
}

Leave a Reply