Interessante post riguardante il multi-threading nel mondo windows form (classico e WPF) che prende in esame 5 tecniche per evitare il fatidico messaggio: “The calling thread cannot access this object because a different thread owns it”.

Per quanto riguarda windows form penso userò spesso questo semplice e conciso:

 

   1:  // WinForm
   2:  private void OnConnectivityChanged(object sender, ConnStatusInfoEventArgs statusInformation)
   3:  {
   4:       this.Invoke(new System.Windows.Forms.MethodInvoker(delegate()
   5:       {
   6:             this.MessageTextBlock.Text = statusInformation.msg;
   7:       }));                       
   8:  }