W Silverlight 4 Mam niestandardową klasę usług z asynchronicznym zakończeniem. Wewnątrz Zakończone razie biorę zwróconych danych i wywołać metodę zapełnić poprzez coś takiego:Dyspozytor. Wywołanie anonimowego delegata działa w środowisku Silverlight, ale nie WPF
private void service_Completed(object sender, CompletedEventArgs args)
{
Dispatcher.BeginInvoke(() => populateInbox(args.Jobs));
}
private void populateInbox(List<JobViewModel> jobs)
{
inbox.DataContext = jobs;
}
The BeginInvoke
prace w SL4, jednak kiedy przeniósł go do WPF pojawia się następujący błąd:
Cannot convert lambda expression to type 'System.Delegate' because it is not a delegate type
Próbuję zmienić go na in-line, anonimowy, paramaterized delegata:
Dispatcher.BeginInvoke(delegate(List<JobViewModel> jobs)
{
inbox.DataContext = jobs;
});
jednak, że daje ten sam błąd kompilacji.
Każdy pomysł, jak uzyskać to działa w WPF? Refaktoryzacja w celu użycia BackgroundWorker
nie jest dla mnie opcją.
dostaję ten błąd teraz: Odwołanie do obiektu jest wymagane dla non-statycznego pola, metody lub właściwości „System.Windows.Threading.Dispatcher.BeginInvoke (System.Delegate, params object []) ". Rozdzieliłem go na 2 linie, aby sprawdzić, co powoduje błąd. var d = new Action (() => populateInbox (args.Jobs)); Dispatcher.BeginInvoke (d, args.Jobs); Błąd występuje w drugiej linii. –
Dispatcher.BeginInvoke (d, nowy obiekt [] {args.Jobs}); To też nie działa. –
@Edward: 'Dispatcher' nie jest statyczną klasą. Będziesz musiał wywołać tę funkcję w kontekście elementu UI, który ma właściwość 'Dispatcher', lub będziesz musiał przekazać w dispatcherze jako inny argument. –