title: Update progress bar in another form while task is running
body: <p>**Ultimately I am going to have four tasks running concurrently and have another form that contains four progress bars.  I would like for each progress bar to update as it's work task is completing. </p>
  
  <p>Here's what I'm trying to do for starters.</p>
  
  <p>I have a form that has some buttons on it.  When I click one I'm creating a new task to do some work.</p>
  
  <pre><code>public partial class MyMainForm : Form
  {
  
      private void btn_doWork_Click(object sender, EventArgs e)
      {
          Task task = new Task(RunComparisons);
          task.Start();
      }
  
      private void RunComparisons()
      {
          int progressBarValue = 0;
          MyProgressBarForm pBar = new MyProgressBarForm(maxValue, "some text");
          pBar.ShowDialog();
          foreach(string s in nodeCollection)
          {
              //do some work here
              progressBarValue++;
              pBar.updateProgressBar(progressBarValue, "some new text");
          }
          pBar.BeginInvoke(new Action(() =&gt; pBar.Close()));
      }
  }
  </code></pre>
  
  <p>In another class that contains a form with a progress bar:</p>
  
  <pre><code>public partial class MyProgressBarForm : Form
  {
      public MyProgressBarForm(int maxValue, string textToDisplay)
      {
          InitializeComponent();
          MyProgressBarControl.Maximum = maxValue;
          myLabel.Text = textToDisplay;
      }
  
      public void updateProgressBar(int progress, string updatedTextToDisplay)
      {
          MyProgressBarForm.BeginInvoke(
              new Action(() =&gt;
              {
                  MyProgressBarControl.Value = progress;
                  myLabel.Text = updatedTextToDisplay;
              }));
      }
  </code></pre>
  
  <p>When I click the doWork button the progress bar form displays but doesn't update. It just sits there and hangs.  If I comment out the pBar.ShowDialog(); then the progress bar form doesn't display but the work to be done is run to completion perfectly.</p>
  
  <p>I had this working perfectly when I was creating my own threads but I read about Tasks and now I'm trying to get this to run that way.  Where did I go wrong?</p>