title: Can I safely bind to data on multi-threaded applications?
body: <p>I'm trying to solve a classic problem - 
  I have a multi-threaded application which runs some
  processor-intensive calculations, with a GUI interface.</p>
  
  <p>Every time one of the threads has completed a task, I'd like to
  update a status on a table</p>
  
  <p>taskID    |   status</p>
  
  <p>I use DataGridView and BindingList in the following way:</p>
  
  <pre><code>BindingList&lt;Task&gt; tasks;
  dataGridView.DataSource = tasks
  
  public class Task : INotifyPropertyChanged
  {
      ID{get;}
      Status{get;set;}
  }
  </code></pre>
  
  <p>Can a background thread safely update a task's status?
  and changes will be seen in the correct order in the GUI?</p>
  
  <p>Second Question:
  When do I need to call to PropertyChanged?
  I tried running with and without the call, didn't seem to bother..</p>
  
  <p>Third Question:
  I've seen on MSDN that dataGridView uses BindingSource
  as a mediator between DataGridView.DataSource and BindingList
  Is this really necessary? </p>