Rx for .NET - Scheduler.Dispatcher发生了什么?

时间:2011-06-26 08:45:49

标签: .net wpf design-patterns observer-pattern system.reactive

我正在努力完成关于PluralSight的Dan Sullivan的Rx Extensions培训课程。这是很好的东西但不幸的是Rx似乎已经被改变了,尽管该课程仅在一个月前发布。

大多数更改都很容易解决(从三个dll更改为单个dll,更改使用的命名空间等)但是我很难理解我应该使用什么代替Dan的示例中的Scheduler.Dispatcher。我在调度程序中可用的属性中看不到任何明显的内容。

这是我正在尝试使用(重构的?)Rx库(当前稳定版本v1.0.10605)的代码

var query = from number in Enumerable.Range(1, 25) select StringWait(number.ToString());
var observableQuery = query.ToObservable(Scheduler.ThreadPool);
observableQuery.ObserveOn(Scheduler**.Dispatcher**).Subscribe(n => Results.AppendText(string.Format("{0}\n", n)));

我应该使用什么来调用原始Dispatcher线程上的Observer代码(Results.AppendText)?

3 个答案:

答案 0 :(得分:41)

DispatcherScheduler已移至System.Reactive.Windows.Threading程序集。如果您使用的是NuGet,则它位于Rx-WPF

答案 1 :(得分:1)

截至2016-11-25,参考文献为df

不幸的是,微软退出RX v2.2.5,转而使用完全跨平台的RX v3.1.0。但是,跨平台库不支持WPF。这意味着现在很难找到适用于WPF的NuGet包。

要解决此问题,如果您使用RX-XAML + WPF,请安装任何依赖于.NET 4.5的NuGet包。例如,RX-XAML取决于reactiveui-blend,因此现在可以使用:

RX-XAML v2.2.5

答案 2 :(得分:0)

在Rx for .NET v4 +中,程序集/程序包在System.Reactive中合并。

现在可以在System.Reactive.Concurrency.DispatcherScheduler.Current中找到分派器调度程序

var subscription = observable
  .ObserveOn(System.Reactive.Concurrency.DispatcherScheduler.Current)
  .Subscribe(observer);

在.NET Core 3.1 WPF应用程序中测试