2014-02-25 62 views

回答

4

ObserveOnDispatcher()不被弃用,但是保罗说,提供一个明确的调度程序通常会更好,因此您可以为单元测试注入一个TestScheduler

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

ObserveOnDispatcher()DispatcherScheduler存在于Windows Phone 8 Rx版本中。它们位于rx-xaml nuget包中,其中包含xaml特定于平台的元素 - 如果您只包含rx-main,则会错过此选项。

具体而言,它们位于System.Reactive.Windows.Threading.dll组件中。 ObserveOnDispatcher()System.Reactive.Linq.DispatcherObservable类型,并且该程序集也有System.Reactive.Concurrency.DispatcherScheduler

+2

'rx-xaml':这就是我错过的! –

2

我平时写:

.ObserveOn(DispatcherScheduler.Instance) 

,如果我不使用ReactiveUI。如果我是,这是

.ObserveOn(RxApp.MainThreadScheduler) 

所不同的是,在一个单元测试运行,RxApp.MainThreadScheduler自动操纵是CurrentThread,所以你的单元测试通过 - 否则他们都会挂起。

+0

在“DispatcherScheduler”是什么名称空间和程序集?我发现的一个('Microsoft.Phone.Reactive.DispatcherScheduler')位于C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework \ WindowsPhone \ v8.0 \ Microsoft.Phone.Reactive.dll中,不是任何NuGet软件包。 –

相关问题