2011-11-03 12 views
5

Tengo un proyecto wpf donde estoy usando INotifyPropertyChanged en una propiedad que se une al cuadro de texto. Estoy actualizando este valor en un hilo diferente usando la tarea (TaskParallelLibrary). Se actualiza correctamente y NO arroja una excepción. Estaba pensando que arrojaría una excepción porque se está ejecutando en un hilo de fondo y no en el hilo de UI. Por supuesto, está lanzando una excepción si uso directamente el elemento UI. Entonces, ¿el mecanismo de enlace INotifyPropertyChanged se encarga de enviar automáticamente el hilo de UI?Tarea paralela biblioteca INotifyPropertyChanged NO lanzando una excepción?

Aquí está mi código con la propiedad.

private string _textProperty = ""; 
    public string TextProperty 
    { 
     get 
     { 
      return _textProperty; 
     } 
     set 
     { 
      if (_textProperty != value) 
      { 
       _textProperty = value; 
       NotifyPropertyChanged("TextProperty"); 
      } 
     } 
    } 

y mi tarea es la creación

var task = new Task(() => 
     { 
      TextProperty = "ABCD"; // Works. 
      // txtBox.Text = "ABCD"; // Throws an exception. 
     }); 
     task.Start(); 

y el cuadro de texto en XAML es <TextBox Name="txtBox" Text="{Binding TextProperty}"/>

Respuesta

6

Estaba pensando que arrojaría una excepción porque se está ejecutando en un hilo de fondo y no en el hilo de la IU.

WPF le permite establecer un valor encuadernado en una cadena de fondo. Manejará la clasificación al hilo de la interfaz de usuario por ti.

Tenga en cuenta, sin embargo, que esto no funciona para los elementos de una colección. Si desea agregar a un ObservableCollection<T> que está vinculado, por ejemplo, tendrá que volver al hilo de la interfaz de usuario. Sin embargo, hay various workarounds que pueden facilitar esto si es necesario. Tenga en cuenta que this behavior changes in WPF 4.5, que simplificará el desarrollo multiproceso en WPF en el futuro.

+1

+1. Interesante enlace a WPF 4.5. Parece que han solucionado algunas de las cosas que no me gustan de WPF actualmente. – RichardOD

+0

@Reed ¿tiene alguna referencia útil sobre cómo wpf prepara la actualización para usted? –

1

La unión a las propiedades individuales no se enrosque afín. Puede hacerlo sin problemas, el enlace hará lo necesario para usted.
Sin embargo, tenga cuidado, esto es solo para enlaces de propiedad única. Si tiene, por ejemplo, un ObservableCollection, no puede agregar o eliminar elementos de otro hilo, ¡incluso si la colección está vinculada a través del enlace!

Cuestiones relacionadas