Perché ObservableCollection richiede che tutte le modifiche vengano apportate sul thread dell'interfaccia utente?

0

E c'è qualche pericolo nel realizzare la mia implementazione di INotifyCollectionChanged che non lo è?

Sto cercando di creare una libreria di classi contenente una classe Log, che a sua volta contiene una sorta di raccolta osservabile. Ma se provo ad aggiungere qualcosa al log da qualsiasi parte tranne il thread dell'interfaccia utente, l'app si arresta in modo anomalo dicendo che non sono autorizzato a farlo. C'è qualche ragione per cui .NET è progettato in questo modo? Posso aggirare il problema senza che accadano cose orribili?

    
posta ekolis 12.02.2016 - 14:32
fonte

1 risposta

4

Questo non ha nulla a che fare con ObservableCollection e tutto ciò che ha a che fare con WPF.

WPF richiede che tutte le modifiche vengano eseguite sul thread dell'interfaccia utente. Ma WPF non invia le modifiche sul thread dell'interfaccia utente quando le modifiche alla raccolta, diversamente dalla modifica delle proprietà.

Puoi aggirare il problema inviando la modifica della raccolta sul thread dell'interfaccia utente usando Dispatcher di WPF. Oppure puoi creare una collezione di wrapper che invierà le modifiche di una collezione che avvolge intorno.

    
risposta data 12.02.2016 - 14:35
fonte

Leggi altre domande sui tag