In Silverlight 4 habe ich eine benutzerdefinierte Serviceklasse, die ein asynchrones Completed-Ereignis hat. Innerhalb der Completed-Ereignis nehme ich die zurückgegebenen Daten und eine bevöl Methode über so etwas wie folgt aufrufen:Dispatcher.Invoke mit anonymen Delegaten funktioniert in Silverlight, aber nicht WPF
private void service_Completed(object sender, CompletedEventArgs args)
{
Dispatcher.BeginInvoke(() => populateInbox(args.Jobs));
}
private void populateInbox(List<JobViewModel> jobs)
{
inbox.DataContext = jobs;
}
Die BeginInvoke
Werke in SL4, aber wenn ich portiert es zu WPF bekomme ich folgende Fehlermeldung:
Cannot convert lambda expression to type 'System.Delegate' because it is not a delegate type
ich habe versucht, es zu einem in-line, anonym, paramaterized Delegierter Wechsel:
Dispatcher.BeginInvoke(delegate(List<JobViewModel> jobs)
{
inbox.DataContext = jobs;
});
jedoch, dass die gleichen Fehler bei der Kompilierung liefert.
Haben Sie eine Idee, wie Sie dies in WPF umsetzen können? Refactoring, um die BackgroundWorker
zu verwenden, ist keine Option für mich.
ich diesen Fehler jetzt: Eine Objektreferenz für die nicht-statische Feld, Methode oder Eigenschaft ‚erforderlich ist System.Windows.Threading.Dispatcher.BeginInvoke (System.Delegate, Parameterobjekt []) '. Ich habe es in 2 Zeilen getrennt, um zu versuchen, zu sehen, was den Fehler verursacht. var d = new Aktion (() => populateInbox (args.Jobs)); Dispatcher.BeginInvoke (d, args.Jobs); Der Fehler tritt in der 2. Zeile auf. –
Dispatcher.BeginInvoke (d, neues Objekt [] {args.Jobs}); Geht auch nicht. –
@Edward: 'Dispatcher' ist keine statische Klasse. Sie müssen diese Funktion entweder im Kontext eines UI-Elements mit einer 'Dispatcher'-Eigenschaft aufrufen, oder Sie müssen den Dispatcher als weiteres Argument übergeben. –