Ho un progetto wpf in cui sto usando INotifyPropertyChanged su una proprietà che si lega alla casella di testo. Sto aggiornando questo valore su un thread diverso usando task (TaskParallelLibrary). È aggiornato correttamente e NON genera un'eccezione. Stavo pensando che genererebbe un'eccezione perché è in esecuzione su un thread in background e non su un thread UI. Ovviamente lancia un'eccezione se utilizzo direttamente l'elemento dell'interfaccia utente. Quindi, il meccanismo di binding di INotifyPropertyChanged si occupa di inviare automaticamente il thread dell'interfaccia utente?Libreria parallela attività INotifyPropertyChanged NON genera un'eccezione?
Ecco il mio codice con la proprietà.
private string _textProperty = "";
public string TextProperty
{
get
{
return _textProperty;
}
set
{
if (_textProperty != value)
{
_textProperty = value;
NotifyPropertyChanged("TextProperty");
}
}
}
e il mio compito è quello di creazione
var task = new Task(() =>
{
TextProperty = "ABCD"; // Works.
// txtBox.Text = "ABCD"; // Throws an exception.
});
task.Start();
e la casella di testo in XAML è <TextBox Name="txtBox" Text="{Binding TextProperty}"/>
+1. Link interessante a WPF 4.5. Sembra che abbiano risolto alcune delle cose che non mi piacciono attualmente su WPF. – RichardOD
@Reed hai a portata di mano un riferimento per come wpf effettua il marshalling dell'aggiornamento per te? –