2013-09-23 23 views
7

Korzystamy z .NET 3.5 i rozpoczęliśmy korzystanie z rozszerzeń reaktywnych. Używamy system.Reactive (Runtime Version: v2.0.50727), który jest kompatybilny z .NET 3.5.Harmonogram dyspozytorski - Rx

Próbuję obserwować zdarzenie w harmonogramie modułu rozsyłającego, ponieważ używam formantów WPF (jest to powłoka WinForm, z wbudowanym sterowaniem hosta WPF), jednak nie można znaleźć tej opcji w klasie Scheduler (system.reactive. concurrency.scheduler). Wygląda na to, że jest dostępny od wersji .NET 4.0. Moje pytanie brzmi: jak mam to działa w .NET 3.5? Zauważ, że połączenie dzieje się wewnątrz mojego ViewModel, a nie View.

Kod:

this.ObservePropertyChanged(x => x.Queue) 
       //I cant find scheduler dispatcher option, 
       //there are other options such as current, imeediete, new etc. 
       .ObserveOn(Scheduler.Dispatcher) 
       .Subscribe(RefreshQueues); 

Dzięki

-Mike

Odpowiedz

1

Myślę, że powinieneś być w stanie korzystać z DispatcherScheduler.Current

+0

AFAIK, prąd będzie wywoływał jedynie działanie na wątku wywołania zwrotnego, który jest wątek tła. Potrzebuję wykonać subskrypcję w wątku interfejsu użytkownika, a kolekcje powiązane z interfejsem użytkownika są aktualizowane. – Mike

+0

DispatcherScheduler.Current jest tym, co opisujesz. Prowadzi rozmowę do bieżącego dyspozytora ui. – Cookingsource

+0

ahh..now dostaję to .. "dispatcherScheduler" a nie "Scheduler" .. Próbowałem System.Reactive.Concurrency.DispatcherScheduler.Current, a linia powoduje błąd kompilacji. Czy jesteś pewien, że jest to dostępne w .NET 3.5 ? – Mike

5

Powinieneś być w stanie zrobić z WinForm RX biblioteka rozszerzeń od http://www.nuget.org/packages/Rx-WinForms/

this.ObservePropertyChanged(x => x.Queue) 
      .ObserveOn(control); 

lub jeśli jesteś już na poprawnym wątku.

this.ObservePropertyChanged(x => x.Queue) 
      .ObserveOn(SynchronizationContext.Current); 
8

Aktualizacja: na podstawie Rx 2.2.4.0
DispatcherScheduler dla WPF jest obecnie przeniósł się do nazw System.Reactive.Windows.Threading.
Korzystanie pakiet Nuget, poszukiwania RX-WPF aby pobrać pakiet i korzystać DispatcherScheduler.Current zamiast Scheduler.Dispatcher