En Silverlight 4 tengo una clase de servicio personalizada que tiene un evento Completo asincrónico. Dentro de la finalización evento tomo los datos devueltos e invocar un método de poblar a través de algo como esto:Dispatcher.Invocar con un delegado anónimo funciona en Silverlight pero no en WPF
private void service_Completed(object sender, CompletedEventArgs args)
{
Dispatcher.BeginInvoke(() => populateInbox(args.Jobs));
}
private void populateInbox(List<JobViewModel> jobs)
{
inbox.DataContext = jobs;
}
Los BeginInvoke
obras en SL4, sin embargo cuando portado a WPF me sale el siguiente error:
Cannot convert lambda expression to type 'System.Delegate' because it is not a delegate type
he intentado cambiar a un filtro en línea, delegado anónima, paramaterized:
Dispatcher.BeginInvoke(delegate(List<JobViewModel> jobs)
{
inbox.DataContext = jobs;
});
Sin embargo, eso da el mismo error en tiempo de compilación.
¿Alguna idea de cómo hacer que esto funcione en WPF? Refactorizar para usar el BackgroundWorker
no es una opción para mí.
estoy recibiendo este error ahora: Se requiere una referencia de objeto para el campo no estático, método o propiedad 'System.Windows.Threading.Dispatcher.BeginInvoke (System.Delegate, params object []) '. Lo separé en 2 líneas para tratar de ver qué está causando el error. var d = new Action (() => populateInbox (args.Jobs)); Dispatcher.BeginInvoke (d, args.Jobs); El error ocurre en la 2da línea. –
Dispatcher.BeginInvoke (d, nuevo objeto [] {args.Jobs}); Tampoco funciona –
@Edward: 'Dispatcher' no es una clase estática. Tendrá que llamar a esta función dentro del contexto de un elemento UI que tenga una propiedad 'Dispatcher', o tendrá que pasar el dispatcher como otro argumento. –