Asynchroniczne dodawanie do ObservableCollection (lub alternatywy)

Oto, co mam - ListBox z ustawieniem ItemsSource na aObservableCollection<T> - gdzie T jest moją klasą niestandardową reprezentującą plik, zawierającą tylko 2 DependencyProperties: Filename i ThumbnailPath. - Listbox ma również zdefiniowaną niestandardową szablon DataTemplate, aby ładnie wyświetlić pod nim obraz i nazwę pliku.

Celem listbox jest wyświetlanie plików wideo w bieżącym folderze (zaznaczonym w TreeView), z miniaturami (generowanymi asynchronicznie; nie stanowi części tego problemu).

Więc kiedy zmieniam folder w TreeView, ObservableCollection jest czyszczone i ponownie wypełniane, co jest automatycznie odzwierciedlane w elementach ListBox.

Oto problem: interfejs użytkownika przestaje odpowiadać i aktualizacja zajmuje kilka sekund. Ponownie, miniatury nie mają tutaj znaczenia (próbowałem je wyłączyć).Myślę najwięcej czasu zajmuje konstrukcja 50-100 instancji mojej niestandardowej klasy i ich wizualna reprezentacja - musi zainicjować obiekt Image dla każdego. Ale to tylko moje przypuszczenie - czy mógłbyś potwierdzić lub wykluczyć taką możliwość?

Zaczynam myślećObservableCollection może nie być dobrym rozwiązaniem tutaj, ponieważ z tego, co przeczytałem i trochę z tego, co próbowałem, nie ma możliwości dodawania elementów asynchronicznie, przynajmniej jeśli te elementy są obiektami zależnymi. Próbowałem utworzyć instancje klasy z programem BackgroundWorker i dodać je do kolekcji w procedurze obsługi zdarzeń ProgressChanged, ale zgłasza wyjątek (problem z wątkami a obiektami zależności).

Czy jest coś, czego brakuje? A może lepiej byłoby po prostu wyrzucić ObservableCollection i napisać dobrą starą asynchroniczną pętlę, aby dodać elementy?

questionAnswers(2)

yourAnswerToTheQuestion