Multithreading WPF nel Binding

di Cristian Civera, in WPF,

Devo segnalarvi un errore nello script #17 dove spiego come implementare INotifyPropertyChanged. Di sbagliato c'è la frase in cui dicevo che è obbligatorio invocare l'evento tramite il Dispatcher, quindi sul thread principale, e mostravo come chiamare la BeginInvoke.

In realtà il motore di Binding sull'evento PropertyChanged internamente controlla già se il thread corrente è quello principale. In caso contrario accoda l'evento sul Dispatcher con priorità DataBind. Quindi quello che proponevo non era sbagliato, ma inutile, risparmiando solo del lavoro al motore di Binding.

C'è da dire comunque che non è dato sapere chi utilizza le nostre proprietà, ma non è altrettanto bello mettere della logica specifica di WPF nelle classi (infatti non lo proponevo per il Domain Model). Va comunque fatta attenzione che solo l'oggetto Binding gestisce questo aspetto. Per esempio le CollectionView che lavorano sulle collezioni, s'arrabbiano generando un'eccezione se modichiamo le liste da altri thread. Possiamo però aggirare il problema invocando PropertyChanged e CollectionChanged sul thread principale affidandoci al Dispatcher. Se usate ObservableCollection<T>, vi basta sovrascrivere OnPropertyChanged e OnCollectionChanged.

Mi scuso per la mala informazione...

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Nella stessa categoria
I più letti del mese