title: Asynchronous File Download with Progress Bar
body: <p>I am attempting to have a progress bar's progress change as the <code>WebClient</code> download progress changes. This code still downloads the file yet when I call <code>startDownload()</code> the window freezes as it downloads the file. I would like for the user to be able to see the progress change as the splash screen loads. Is there any way to fix this so that the user can see the progress of <code>progressBar2</code> change?</p>
  
  <pre><code>private void startDownload()
  {
      WebClient client = new WebClient();
      client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
      client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
      client.DownloadFileAsync(new Uri("http://joshua-ferrara.com/luahelper/lua.syn"), @"C:\LUAHelper\Syntax Files\lua.syn");
  }
  void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
  {
      double bytesIn = double.Parse(e.BytesReceived.ToString());
      double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
      double percentage = bytesIn / totalBytes * 100;
      label2.Text = "Downloaded " + e.BytesReceived + " of " + e.TotalBytesToReceive;
      progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
  }
  void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
  {
      label2.Text = "Completed";
  }
  </code></pre>