Agregar de forma asíncrona a ObservableCollection (o una alternativa)

Esto es lo que tengo: un ListBox con un ItemsSource establecido en unObservableCollection<T> - donde T es mi clase personalizada que representa un archivo, que contiene solo 2 DependencyProperties: nombre de archivo y ThumbnailPath. - El cuadro de lista también tiene un DataTemplate personalizado definido, para mostrar bien una imagen y un nombre de archivo debajo.

El propósito del cuadro de lista es mostrar los archivos de video en la carpeta actual (seleccionada en un TreeView), con miniaturas (generadas de forma asíncrona; no es parte de este problema).

Entonces, cuando cambio la carpeta en el TreeView, la colección Observable se borra y se llena nuevamente, lo que se refleja automáticamente en los elementos del cuadro de lista.

Aquí está el problema: la interfaz de usuario deja de responder y tarda varios segundos en actualizarse. Una vez más, las miniaturas no tienen importancia aquí (traté de deshabilitarlas).Yo creo que lo que lleva más tiempo es la construcción de 50-100 instancias de mi clase personalizada, y su representación visual: tiene que inicializar un objeto de imagen para cada una. Pero es solo mi suposición, ¿podría confirmar o excluir la posibilidad?

Estoy empezando a pensarObservableCollection puede no ser el camino a seguir aquí, ya que por lo que leí y un poco por lo que intenté, no hay manera de agregar elementos de forma asíncrona, al menos si estos elementos son DependencyObjects. Intenté crear mis instancias de clase con un BackgroundWorker y agregarlas a la colección en el controlador de eventos ProgressChanged, pero produce una excepción (algunos problemas de subprocesos vs dependencyobjects).

¿Hay algo que me falta? ¿O estaría mejor simplemente deshaciéndome de ObservableCollection y escribiendo un viejo async for loop para agregar los elementos?

Respuestas a la pregunta(2)

Su respuesta a la pregunta