2013-09-23 13 views
7

Stiamo utilizzando .NET 3.5 e ha iniziato a utilizzare le estensioni reattive. Stiamo usando system.Reactive (Runtime Version: v2.0.50727) che è compatibile per .NET 3.5.Scheduler del dispatcher - Rx

Sto cercando di osservare un evento sullo scheduler del dispatcher poiché utilizzo i controlli WPF (è Winforms Shell, con il controllo host WPF incorporato), tuttavia non sono riuscito a individuare quell'opzione nella classe Scheduler (system.reactive. concurrency.scheduler). Sembra che sia disponibile da .NET 4.0 in poi. La mia domanda è, come faccio a farlo funzionare in .NET 3.5? Si noti che la chiamata sta accadendo nel mio ViewModel e non in View.

Codice:

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); 

Grazie,

-Mike

risposta

1

penso che si dovrebbe essere in grado di utilizzare DispatcherScheduler.Current

+0

per quanto ne so, la corrente richiamare solo l'azione sul filo di callback, che è un thread in background. Ho bisogno di eseguire la sottoscrizione sul thread dell'interfaccia utente e le raccolte vincolate all'interfaccia utente vengono aggiornate. – Mike

+0

DispatcherScheduler.Current è ciò che stai descrivendo. Effettua il marshalling della chiamata al dispatcher ui corrente. – Cookingsource

+0

ahh .. ora ho capito .. "dispatcherScheduler" e non "Scheduler" .. Ho provato System.Reactive.Concurrency.DispatcherScheduler.Current, e la riga si traduce in errore di compilazione. Siete sicuri che questo è availiable in. NET 3.5 ? – Mike

5

Si dovrebbe essere in grado di fare con le WinForms RX libreria di estensione da http://www.nuget.org/packages/Rx-WinForms/

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

o se si è già sulla filettatura corretta.

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

Aggiornamento: sulla base di Rx 2.2.4.0
DispatcherScheduler per WPF è attualmente spostato in System.Reactive.Windows.Threading namespace.
Utilizzando pacchetto Nuget, ricerca di Rx-WPF per scaricare il pacchetto e utilizzare DispatcherScheduler.Current al posto di Scheduler.Dispatcher