Ok, esto puede ser realmente simple, pero todo lo que intento parece golpear una pared de ladrillo.WPF Dispatcher, Trabajador de segundo plano y un montón de dolor
Tengo un modelo de vista con dos propiedades, que están unidos a mi forma de WPF:
bool IsWorking {get;set;}
ObservableCollection<OtherViewModel> PendingItems {get;set;}
tengo un método que llamo a buscar algunos elementos nuevos pendientes de perspectivas, sin embargo también qué mostrar algún tipo de progreso en el formulario (barra de progreso giratoria), la visibilidad de la barra de progreso está vinculada a la propiedad IsWorking en ViewModel, y una grilla está vinculada a la colección PendingItems.
Me gustaría poder establecer el IsWorking en verdadero para que la IU pueda mostrar la barra de progreso, ejecutar el trabajo en segundo plano y luego establecer IsWorking en falso una vez que haya finalizado para que desaparezca la barra de progreso.
he creado un backgroudworker algo como esto:
worker = new BackgroundWorker();
worker.DoWork += new DoWorkEventHandler(worker_DoWork);
worker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(worker_RunWorkerCompleted);
worker.RunWorkerAsync();
Ahora worker_DoWork llama al método que va de un Obtiene los puntos pendientes y los añade a la colección PendingItems, todo funciona en el fondo de la interfaz de usuario responde, pero Obtengo el error de cruce cruzado normal al intentar agregar a la colección. Envolví el código que cambia la colección en un distribuidor de llamadas:
// Update to show the status dialog.
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.Render,
new Action(delegate()
{
this.PendingItems.Add(\\Blah);
})
);
pero todavía arroja el mismo error hilo cruzado.
No soy muy bueno con el enhebrado, así que no tengo idea de qué podría estar haciendo mal, ¿alguien podría ayudarme con esto?
Muchas gracias funciona muy bien. –
segundo enlace está muerto. ¿Algunas ideas? – brumScouse
@brumScouse pruébelo ahora –