title: Wait for download to complete
body: <p>I'm trying to create a simple program to download few files. I've tried some ready-made solutions I found on the web but I can't manage to make it work the way I want it to. I'm using this:</p>
  
  <pre><code>    private void startDownload(string toDownload, string saveLocation)
      {
          Thread thread = new Thread(() =&gt;
          {
              WebClient client = new WebClient();
              client.DownloadProgressChanged += new DownloadProgressChangedEventHandler(client_DownloadProgressChanged);
              client.DownloadFileCompleted += new AsyncCompletedEventHandler(client_DownloadFileCompleted);
              client.DownloadFileAsync(new Uri(toDownload), saveLocation);
          });
          thread.Start();
      }
  
      void client_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
      {
          this.BeginInvoke((MethodInvoker)delegate
          {
              double bytesIn = double.Parse(e.BytesReceived.ToString());
              double totalBytes = double.Parse(e.TotalBytesToReceive.ToString());
              double percentage = bytesIn / totalBytes * 100;
              labelPercentage.Text = "Downloading " + Convert.ToInt32(percentage) + "%  -  " + Convert.ToInt32(bytesIn / 1024) + " / " + Convert.ToInt32(totalBytes / 1024) + " kB";
              progressBar1.Value = int.Parse(Math.Truncate(percentage).ToString());
          });
      }
  
      void client_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
      {
          this.BeginInvoke((MethodInvoker)delegate
          {
              textBoxLog.AppendText("OK");
          });
      }
  </code></pre>
  
  <p>I'd like to make the program continue (download next file / show the "OK" message / do whatever is in the next line of code) AFTER the download has finished.
  In the current form, if I'd put eg.</p>
  
  <pre><code>    private void button1_Click(object sender, EventArgs e)
      {
          startDownload(url, localpath + @"\file.zip");
          textBoxLog.AppendText("the cake is a lie");
      }
  </code></pre>
  
  <p>it's showing me this text first and "OK" later.</p>
  
  <p>I'm beginning with c#/.net and I've never learned object-oriented programming before so it's kind of double challenge for me and I can't figure it out by myself. I would be really grateful for relatively easy explanation.</p>