title: Update label from another thread
body: <p>I use a thread writing in another class for update a label.
  The label is contents in Winform Main class.</p>
  
  <pre><code> Scanner scanner = new Scanner(ref lblCont);
   scanner.ListaFile = this.listFiles;
   Thread trd = new Thread(new ThreadStart(scanner.automaticScanner));
   trd.IsBackground = true;
   trd.Start();
   while (!trd.IsAlive) ;
   trd.Join();
  </code></pre>
  
  <p>How you can see, i pass the reference of label into constructor of the second class.
  In the second class(Scanner) i've a method called "automaticScanner" that should update the label with this code:</p>
  
  <pre><code>public Scanner(ref ToolStripStatusLabel _lblContatore)
  {
          lblCounter= _lblContatore;
  }
  Thread threadUpdateCounter = new Thread(new ThreadStart(this.UpdateCounter));
  threadUpdateCounter.IsBackground = true;
  threadUpdateCounter.Start();
  while (!threadUpdateCounter .IsAlive) ;
  threadUpdateCounter.Join();
  
  private void AggiornaContatore()
  {
    this.lblCounter.Text = this.index.ToString();        
  }
  </code></pre>
  
  <p>I've receive this error on update of label:</p>
  
  <blockquote>
    <p>Cross-thread operation not valid: Control 'Main' accessed from a thread other than the thread it was created on</p>
  </blockquote>
  
  <p>I use .net 4 with Winform C#.</p>
  
  <p>Thanks a lot for answers.</p>
  
  <p>News:
  The problem is this line:</p>
  
  <pre><code>trd.Join();
  </code></pre>
  
  <p>This line block my GUI and the lable was not update.
  There are methods to control the finish of thread and updating the label until the end?
  Thanks</p>