Ecco quello che ho - un ListBox con un'ItemsSource impostata su un ObservableCollection<T>
- dove T è la mia classe personalizzata che rappresenta un file, che contiene solo 2 DependencyProperties: Nome file e ThumbnailPath. - La listbox ha anche un DataTemplate personalizzato definito, al fine di visualizzare con piacere un'immagine e il nome del file sotto di esso.asincrono aggiungendo ObservableCollection (o in alternativa)
Lo scopo della casella di riepilogo è visualizzare i file video nella cartella corrente (selezionata in un TreeView), con miniature (generate in modo asincrono, non facenti parte di questo problema).
Così quando cambio la cartella in TreeView, ObservableCollection viene cancellata e riempita di nuovo, che si riflette automaticamente negli oggetti ListBox.
Ecco il problema: l'interfaccia utente non risponde e sono necessari alcuni secondi per l'aggiornamento. Ancora una volta, le miniature non hanno significato qui (ho provato a disabilitarle). Penso che ciò che richiede più tempo sia la costruzione di 50-100 istanze della mia classe personalizzata, e la loro rappresentazione visiva - deve inizializzare un oggetto Immagine per ognuno. Ma è solo una mia ipotesi - potresti confermare o escludere la possibilità?
Sto cominciando a pensare ObservableCollection non posso la strada da percorrere qui, dal momento che da quello che ho letto e un po 'da quello che ho provato, non c'è modo di aggiungere elementi in modo asincrono, almeno se questi elementi sono DependencyObjects. Ho provato a creare le istanze di classe con un BackgroundWorker e ad aggiungerle alla raccolta nel gestore di eventi ProgressChanged, ma genera un'eccezione (alcuni problemi di threading e dependencyobjects).
C'è qualcosa che mi manca? O dovrei stare meglio semplicemente abbandonando ObservableCollection e scrivendo un buon vecchio async per il loop per aggiungere gli elementi?
Qual è il tipo di eccezione esatto e il messaggio? – Adam
"È necessario creare DependencySource sullo stesso thread di DependencyObject" –
E a proposito di "Binding, IsAsync = True"? –