title: BackgroundWorker not firing RunWorkerCompleted
body: <p>The first time I run my backgroundworker it runs correctly - updates a datatable in the background and then RunWorkerCompleted sets the datatable as a datagridview datasource. </p>
  
  <p>If I then run it again, the datagridview clears and doesn't update. I can't work out why. </p>
  
  <p>I've verified that the datatable contains rows when my code hits dgvReadWrites.DataSource.  </p>
  
  <pre><code>    private void btnGenerateStats_Click(object sender, EventArgs e)
      {
          dtJobReadWrite.Columns.Clear();
          dtJobReadWrite.Rows.Clear();
          dgvReadWrites.DataSource = dtJobReadWrite;
  
          List&lt;Tuple&lt;string, string&gt;&gt;jobs = new List&lt;Tuple&lt;string, string&gt;&gt;();
  
          foreach (ListViewItem job in lstJobs.SelectedItems)
          {
              jobs.Add(new Tuple&lt;string, string&gt;(job.Text, job.SubItems[2].Text));
          }
          BackgroundWorker bgw = new BackgroundWorker();
          bgw.WorkerReportsProgress = true;
          bgw.WorkerSupportsCancellation = true;
          bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
          bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
          pbarGenStats.Style = ProgressBarStyle.Marquee;
          pbarGenStats.MarqueeAnimationSpeed = 30;
          pbarGenStats.Visible = true;
          bgw.RunWorkerAsync(jobs);
      }
  
  
      private void bgw_DoWork(object sender, DoWorkEventArgs e)
      {
          BackgroundWorker bgw = sender as BackgroundWorker;
          List&lt;Tuple&lt;string, string&gt;&gt; jobs = (List&lt;Tuple&lt;string, string&gt;&gt;)e.Argument;
          GetReadWriteStats(jobs);
      }
  
      private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
      {
          BackgroundWorker bgw = sender as BackgroundWorker;
          bgw.RunWorkerCompleted -= new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
          bgw.DoWork -= new DoWorkEventHandler(bgw_DoWork);
          pbarGenStats.MarqueeAnimationSpeed = 0;
          pbarGenStats.Value = 0;
          pbarGenStats.Visible = false;
          dgvReadWrites.DataSource = dtJobReadWrite;
          dgvReadWrites.Visible = true;
          dgvReadWrites.Refresh();
      } 
  </code></pre>