什么是在UI线程上观察的正确方法

时间:2014-02-25 02:51:52

标签: windows-phone-8 system.reactive

我在Geolocator上构建了observable,并且必须在UI线程上订阅事件。

是否已弃用ObserveOnDispatcher

2 个答案:

答案 0 :(得分:4)

不推荐使用

ObserveOnDispatcher(),但正如Paul所说,提供明确的调度程序通常会更好,因此您可以为单元测试注入TestScheduler

DispatcherScheduler.Current可用于获取当前DispatcherScheduler - 而不是.Instance,这是有道理的,因为实际上可以有不止一个 - 尽管大多数人不应该失败那条特别的道路!

Windows Phone 8 Rx版本中存在

ObserveOnDispatcher()DispatcherScheduler。它们位于rx-xaml nuget包中,其中包含xaml平台特定元素 - 如果您只包含rx-main,则会错过这个。

具体来说,它们位于System.Reactive.Windows.Threading.dll程序集中。 ObserveOnDispatcher()类型为System.Reactive.Linq.DispatcherObservable,程序集也有System.Reactive.Concurrency.DispatcherScheduler

答案 1 :(得分:2)

我经常写:

.ObserveOn(DispatcherScheduler.Instance)

如果我没有使用ReactiveUI。如果我是,那就是

.ObserveOn(RxApp.MainThreadScheduler)

不同之处在于,在单元测试运行中,RxApp.MainThreadScheduler被自动绑定为CurrentThread,因此您的单元测试通过 - 否则它们都会挂起。