expresión Lambda no son convertir implícitamente a los delegados en ciertos casos. Específicamente, si el método espera el tipo Delegate
primero tiene que lanzar explícitamente el lambda para que el compilador lo acepte.
Lo que puede hacer es convertir explícitamente la lambda, lo que debería permitir el uso de BeginInvoke
:
lvMyAssignments.Dispatcher.BeginInvoke((Action)(() =>
{
lvMyAssignments.ItemsSource = e.HandOverDocs;
}));
Normalmente, si tiene un método con una firma del delegado inflexible de tipos, como:
public static void BeginInvoke(Action d) { ... }
El compilador puede convertir una expresión lambda a la firma de delegado apropiada necesaria. Pero si el método está vaciado a máquina:
public static void BeginInvoke(Delegate d) { ... }
el compilador no aceptará una lambda. Sin embargo, puede convertir la expresión lambda en una firma de delegado específica (por ejemplo, Acción) y luego pasarla al método. El compilador no puede hacer esto automáticamente, ya que hay muchos tipos de delegados diferentes que podrían ser una coincidencia válida para la firma de la lambda ... y el compilador no tiene forma de saber cuál sería la correcta.
Es mejor usar '' programación Task' o SynchronizationContext' en lugar de 'Dispatcher', por lo que su código BLL no está ligado a WPF/Silverlight . –