2008-10-21 6 views
5

In einem WinForms-Benutzersteuerelement würde ich Daten an den GUI-Hauptthread weitergeben, indem ich von einer der Methoden des Steuerelements this.BeginInvoke() aufruft. Was ist das Äquivalent in einem Silverlight UserControl?In Silverlight, wie eine Operation auf dem Main Dispatch Thread aufgerufen wird?

Mit anderen Worten, wie kann ich Daten nehmen, die von einem beliebigen Worker-Thread bereitgestellt werden, und sicherstellen, dass es auf dem Hauptdispatch-Thread verarbeitet wird?

Antwort

6

Verwenden Sie die Dispatcher-Eigenschaft für die UserControl-Klasse.

private void UpdateStatus() 
{ 
    this.Dispatcher.BeginInvoke(delegate { StatusLabel.Text = "Updated"; }); 
} 
2
private void UpdateStatus() 
    { 
     // check if we not in main thread 
     if(!this.Dispatcher.CheckAccess()) 
     { 
      // call same method in main thread 
      this.Dispatcher.BeginInvoke(UpdateStatus); 
      return; 
     } 

     // in main thread now 
     StatusLabel.Text = "Updated"; 
    }