Multithreading WPF nel Binding
di Cristian Civera, in WPF, domenica 21 ottobre 2007 ore 23.40
Archiviato in: .NET Framework, .NET Framework 3.0, .NET Framework 3.5, Windows Presentation Foundation
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...
Nella stessa categoria
I più letti del mese



















Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.