调度程序 - Rx

6
我们正在使用.NET 3.5,并开始使用响应式扩展。我们正在使用兼容于.NET 3.5的system.Reactive(运行时版本:v2.0.50727)。
我试图在调度程序上观察一个事件,因为我正在使用WPF控件(它是WinForms外壳,内嵌WPF主机控件),但是我在Scheduler类(system.reactive.concurrency.scheduler)中没有发现该选项。看起来这个选项只能从.NET 4.0开始使用。我的问题是,在.NET 3.5中如何使其工作?请注意,调用发生在我的ViewModel而不是View中。
代码:
 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
3个回答

8

更新:基于Rx 2.2.4.0
WPF的DispatcherScheduler目前已经移动到System.Reactive.Windows.Threading命名空间中。
使用Nuget包,搜索Rx-WPF来下载包并使用DispatcherScheduler.Current代替Scheduler.Dispatcher。


5

您可以使用来自http://www.nuget.org/packages/Rx-WinForms/的RX Winforms扩展库进行操作。

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

或者,如果您已经在正确的线程上。
this.ObservePropertyChanged(x => x.Queue)
           .ObserveOn(SynchronizationContext.Current);

3
我认为您应该能够使用 DispatcherScheduler.Current。

据我所知,当前代码只会在回调线程上执行操作,而该线程是一个后台线程。我需要在UI线程上执行订阅操作,并更新UI绑定的集合。 - Mike
DispatcherScheduler.Current就是您所描述的内容。它将调用封送到当前UI调度程序。 - Cookingsource
啊哈..现在我明白了.."dispatcherScheduler" 而不是 "Scheduler"..我尝试了 System.Reactive.Concurrency.DispatcherScheduler.Current,但这行代码编译错误。你确定这在 .NET 3.5 中可用吗? - Mike
1
应该没有必要在.NET 3.5中提供DispatcherScheduler实现所需的任何内容。命名空间是正确的,可能有一些缺失的引用?这个问题似乎已经在这个链接中得到了解决:link - Cookingsource
请确保您拉取了wpf/xaml nuget包。显然,与Dispatcher相关的代码不会在平台无关的代码库上发布,因为在服务器上没有意义,在其他平台上它具有不同的含义(winPhone/silverlight)。 - Lee Campbell

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接