Cargar un ObservableCollection con una tarea

Estoy tratando de cargar a todos los usuarios en nuestro directorio activo y mostrarlos en un ListBox. Sin embargo, si hago esto como de costumbre, congelaré el hilo de UI durante mucho tiempo. Entonces, ¿puedo usar una tarea para llenar esta colección en un hilo de fondo mientras sigo actualizando el cuadro de lista a medida que inserto nuevos nombres?

Como no puede cargar todos los datos en un subproceso separado (o tarea, lo que sea) y luego llenar el ObservableCollection, puede pasar el Dispatcher actual a la operación y usar su método InvokeAsync para agregar los elementos uno por uno a la colección Observable en el Hilo de la interfaz de usuario. Algo como esto:

 public void FetchAndLoad() { // Called from the UI, run in the ThreadPool Task.Factory.StartNew( () => this.FetchAsync(e => this.Dispatcher.InvokeAsync( () => this.observableCollection.Add(e) ) )); } public void Fetch(Action addDelegate) { // Dummy operation var list = new List("Element1", "Element2"); foreach (var item in list) addDelegate(item); } 

Sin embargo, lo haría en lotes, dependiendo del número de elementos.