2013-09-23 153 views
7

我們使用.NET 3.5並已開始使用Reactive Extensions。我們正在使用與.NET 3.5兼容的system.Reactive(運行時版本:v2.0.50727)。我試圖觀察調度程序調度程序上的事件,因爲我使用WPF控件(它是winforms外殼,嵌入WPF主機控件),但是我無法在調度程序類(system.reactive)上發現該選項。 concurrency.scheduler)。看起來像從.NET 4.0起可用。我的問題是,我如何才能在.NET 3.5中工作?請注意,該調用發生在我的ViewModel而不是View中。調度程序調度程序 - Rx

代碼:

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

感謝,

-Mike

回答

1

我想你應該能夠使用DispatcherScheduler.Current

+0

AFAIK,current只會調用回調線程(後臺線程)上的操作。我需要在UI線程上執行訂閱,並且UI綁定集合正在更新。 – Mike

+0

DispatcherScheduler.Current就是你所描述的。它彙集了當前的ui調度員的呼叫。 – Cookingsource

+0

ahh ..現在我明白了..「dispatcherScheduler」,而不是「Scheduler」..我試過System.Reactive.Concurrency.DispatcherScheduler.Current,並且該行導致編譯錯誤。您確定這在.NET 3.5中可用? – Mike

5

你應該能夠與RX的WinForms做來自http://www.nuget.org/packages/Rx-WinForms/的擴展庫

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

或者您已經在正確的線程上。

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

更新:根據的Rx 2.2.4.0對WPF
DispatcherScheduler目前移入System.Reactive.Windows.Threading命名空間。
使用Nuget包,搜索Rx-WPF以下載軟件包並使用DispatcherScheduler.Current來代替Scheduler.Dispatcher