WPF Databinding safety?

Bene, diciamo che ho un object a cui associare i dati, implementa INotifyPropertyChanged per dire alla GUI quando un valore è cambiato …

se faccio scattare questo da un thread diverso rispetto al thread della GUI, come si comporterebbe wpf?

e si assicurerà che ottenga il valore della proprietà dalla memoria e non dalla cache della CPU?

più o meno sto chiedendo se wpf è lock () sull’object che contiene la proprietà …

Le modifiche di valore INotifyPropertyChanged da INotifyPropertyChanged vengono automaticamente INotifyPropertyChanged sul dispatcher. ( http://blog.lab49.com/archives/1166 )

Spara questo evento su qualsiasi filo che ti piace …


Le modifiche di valore INotifyCollectionChanged da INotifyCollectionChanged NON vengono INotifyCollectionChanged correttamente al dispatcher. ( http://csharplive.wordpress.com/2008/09/11/wpf-data-binding-observablecollection-cross-thread-binding-support/ )

Se è necessario aggiornare una raccolta osservabile da un thread diverso, seguire i consigli in questo collegamento

Oltre alla risposta di @Rob Fonseca-Ensor, ci sono buone notizie per chi è abbastanza fortunato da usare WPF4.5:

WPF consente di accedere e modificare raccolte di dati su thread diversi da quello che ha creato la raccolta. Ciò consente di utilizzare un thread in background per ricevere dati da un’origine esterna, ad esempio un database, e visualizzare i dati sul thread dell’interfaccia utente. Usando un altro thread per modificare la raccolta, l’interfaccia utente rimane retriggers all’interazione dell’utente. ( https://msdn.microsoft.com/en-us/library/bb613588(v=vs.110).aspx#xthread_access )

C’è un sumrio utile di Jonathan Antoine: http://www.jonathanantoine.com/2011/09/24/wpf-4-5-part-7-accessing-collections-on-non-ui-threads/

In pratica sembra funzionare come previsto e sembra essere thread-safe (non ho visto nulla di strano accadere o eccezioni a seguito dell’aggiornamento sul thread in background). Credo che invochi il thread dell’interfaccia utente quando necessario, ma non ho molta familiarità con gli interni.