【问题标题】:Rx for .NET - What happened to Scheduler.Dispatcher?.NET 的 Rx - Scheduler.Dispatcher 发生了什么?
【发布时间】:2011-06-26 08:45:48
【问题描述】:

我正在尝试完成 Dan Sullivan 在 PluralSight 上的 Rx 扩展培训课程。这是很棒的东西,但不幸的是 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 线程上的观察者代码 (Results.AppendText)?

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 谢谢。我引用了那个 dll,但我很难理解我应该用什么来替换上面查询中的“ObserveOn”方法。我可以引用 DispatcherScheduler,但它没有可供调用的订阅方法。
    • 您可以将其更改为ObserveOnDispatcher(),这是System.Reactive.Windows.Threading 程序集中定义的扩展方法。
    • 明白了!谢谢。所以我的最后一行变成 observableQuery.ObserveOnDispatcher().Subscribe(n => Results.AppendText(string.Format("{0}\n", n)));
    • 对于其他正在寻找这个的人,我发现它打包在 NuGet 中的 Rx-XAML 下。看起来也有一些 WPF 助手,但 ObserveOnDispatcher() 或 DispatcherScheduler 似乎不需要这些助手。
    【解决方案2】:

    截至 2016 年 11 月 25 日,参考号为 RX-XAML

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

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

    setClipboard.ObserveOnDispatcher().Subscribe(o =>
    {
        ...
    });
    

    【讨论】:

    • 我更容易从 VS 中的包管理器控制台运行 Install-Package Rx-Xaml -Version 2.2.5
    • 不错!这个好像比较简单,我以后就用这个了。
    【解决方案3】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-10-05
      • 2010-09-07
      • 2020-04-05
      • 2016-02-28
      • 2014-02-28
      • 2010-10-02
      • 2020-03-14
      相关资源
      最近更新 更多