Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 调度器调度器-Rx_C#_System.reactive - Fatal编程技术网

C# 调度器调度器-Rx

C# 调度器调度器-Rx,c#,system.reactive,C#,System.reactive,我们正在使用.NET3.5,并且已经开始使用反应式扩展。我们正在使用system.Reactive(运行时版本:v2.0.50727),它与.NET3.5兼容 由于我使用WPF控件(它是winforms shell,嵌入了WPF主机控件),所以我试图在调度程序类(system.Responsive.concurrency.scheduler)上观察一个事件,但是我在调度程序类上找不到该选项。看起来它是从.NET 4.0开始提供的。我的问题是,我如何让它在.NET3.5中工作?请注意,调用发生在我

我们正在使用.NET3.5,并且已经开始使用反应式扩展。我们正在使用system.Reactive(运行时版本:v2.0.50727),它与.NET3.5兼容

由于我使用WPF控件(它是winforms shell,嵌入了WPF主机控件),所以我试图在调度程序类(system.Responsive.concurrency.scheduler)上观察一个事件,但是我在调度程序类上找不到该选项。看起来它是从.NET 4.0开始提供的。我的问题是,我如何让它在.NET3.5中工作?请注意,调用发生在我的ViewModel中,而不是View中

代码:

谢谢


-Mike

我认为您应该能够使用DispatchersScheduler。当前

您应该能够从

或者如果你已经在正确的线程上了

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

更新:基于Rx 2.2.4.0
WPF的DispatchersScheduler当前已移动到System.Reactive.Windows.Threading命名空间中

使用Nuget package,搜索Rx WPF以下载包,并使用Dispatchers Scheduler.Current代替Scheduler.Dispatcher

AFAIK,Current将仅调用回调线程上的操作,回调线程是后台线程。我需要在UI线程上执行订阅,UI绑定集合正在更新。DispatchersScheduler.Current就是您所描述的。它将调用封送到当前ui dispatcher.ah..现在我明白了..“DispatchersScheduler”而不是“Scheduler”。.我尝试了System.Reactive.Concurrency.DispatchersScheduler.current,该行导致编译错误。您确定这在.NET 3.5中可用吗?应该是,对于DispatchersScheduler的实现,没有什么是.NET3.5不能提供的。名称空间正确,可能缺少一些引用?这个问题似乎已解决,请确保使用wpf/xaml nuget包。显然,与Dispatcher相关的代码不会在平台无关的代码库中发布,因为在服务器上它没有意义,而在其他平台上它有不同的含义(winPhone/silverlight)
this.ObservePropertyChanged(x => x.Queue)
           .ObserveOn(control);
this.ObservePropertyChanged(x => x.Queue)
           .ObserveOn(SynchronizationContext.Current);