Downloading
a file is a common task, and it is often useful to run this potentially
time-consuming operation on a separate thread.
Use the BackgroundWorker component to accomplish this task
with very little code.
First
Create a New Windows forms application, and then Add Textbox, Button, progress bar and BackgroundWorker Controls to
that Form. Also add a FolderBrowserDialog
Control for Select the folder to save Downloaded File. 
The
following code example demonstrates how to use a BackgroundWorker component to download file from a URL. When
the user clicks the Download button, the Click event handler opens a Folder
Browsing Dialogue box, after selecting the Folder the RunWorkerAsync method of a BackgroundWorker component to start the download operation. The button
is disabled for the duration of the download, and then enabled when the
download is complete. A Message Box displays
the Result of Downloading. 
First, we have to Enter the URL into text box for Download a File 
URL like this:
http://download.crossloop.com/CrossLoopSetupPremium.exe?1331890013457.exe
The btnDownload_Click Event Method opens
dialogue box to select a Folder for saving the downloaded file.
private void btnDownload_Click(object
sender, EventArgs e)
{
     if (txtAddress.Text == "")
          MessageBox.Show("Please Enter URL To Download File.");
     else
     {
           btnDownload.Enabled=false;
           folderBrowserDialog1.ShowDialog();
           bgWorker1.RunWorkerAsync();
     }
}
Set the
BackgroundWorker's properties like this:
Go to the
Events view of the BackgroundWorker
and double click each of its events so they are auto-wired up as shown here:
Double
click the button to auto-wire up the event click event and call our background
worker to start running asynchronously when the button is clicked. Your code
will look something like this:
private void bgWorker1_DoWork(object sender, DoWorkEventArgs e)
 {
     string sUrlToDnldFile
= txtAddress.Text;
     string sFileSavePath;
  
  try
     
{
    
   Uri url = new Uri(sUrlToDnldFile);
        string sFileName
= Path.GetFileName(url.LocalPath);
    
   sFileSavePath = folderBrowserDialog1.SelectedPath.ToString()+"\\" + sFileName;
       
System.Net.HttpWebRequest request
= (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);
        
System.Net.HttpWebResponse response
= (System.Net.HttpWebResponse)request.GetResponse();
        
response.Close();
         // gets the
size of the file in bytes
         long iSize
= response.ContentLength;
        // keeps
track of the total bytes downloaded so we can update the progress bar
 
      long iRunningByteTotal
= 0;
        WebClient client
= new WebClient();
        Stream strRemote
= client.OpenRead(url);
        FileStream strLocal
= new FileStream(sFileSavePath, FileMode.Create, FileAccess.Write, FileShare.None);
    
    int iByteSize =
0;
        byte[] byteBuffer = new byte[1024];
         while ((iByteSize
= strRemote.Read(byteBuffer, 0, byteBuffer.Length)) > 0)
         
{
           
 // write the bytes to the file system at the
file path specified
          
 strLocal.Write(byteBuffer, 0, iByteSize);
                   
iRunningByteTotal += iByteSize;
            
 // calculate the progress out of a base
"100"
            
 double dIndex = (double)(iRunningByteTotal);
              double dTotal
= (double)iSize;
              double dProgressPercentage
= (dIndex / dTotal);
               int iProgressPercentage
= (int)(dProgressPercentage
* 100);
                    // update
the progress bar
                   
bgWorker1.ReportProgress(iProgressPercentage);
               
}
               
strRemote.Close();
               
status = true;
           
}
            catch (Exception exM)
           
{
           
//Show if any error Occured
                MessageBox.Show("Error: " +
exM.Message);
               
status = false;
           
}
       
} 
Now
implement the BackgroundWorker's ProgressChanged
event to update the progress bar.
Here's the
code:
private void bgWorker1_ProgressChanged(object sender, ProgressChangedEventArgs
e)
  {
        progressBar1.Value =
e.ProgressPercentage;
  }
For convenience, in the
result you can show a message that your file is downloaded to note that it is
completely finished like this:
private void
bgWorker1_RunWorkerCompleted(object sender,RunWorkerCompletedEventArgs e)
{
  if
(status == true)
        MessageBox.Show("File Download Compleated..");
  else
        MessageBox.Show("FILE Not Downloaded");
        txtAddress.Text = "";
         GC.Collect();
  }
For Downloading the entire solution file CLICK HERE
For Downloading the Set Up file for this application CLICK HERE 


