title: Proper way to Dispose of a BackGroundWorker
body: <p>Would this be a proper way to dispose of a BackGroundWorker?  I'm not sure if it is necesary to remove the events before calling .Dispose().  Also is calling .Dispose() inside the RunWorkerCompleted delegate ok to do?</p>
  
  <pre><code>public void RunProcessAsync(DateTime dumpDate)
  {
      BackgroundWorker worker = new BackgroundWorker();
      worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
      worker.DoWork += new DoWorkEventHandler(worker_DoWork);
      worker.RunWorkerAsync(dumpDate);
  }
  
  void worker_DoWork(object sender, DoWorkEventArgs e)
  {
      // Do Work here
  }
  
  void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
  {
      BackgroundWorker worker = sender as BackgroundWorker;
      worker.RunWorkerCompleted -= new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
      worker.DoWork -= new DoWorkEventHandler(worker_DoWork);
      worker.Dispose();
  }
  </code></pre>