2011-06-26 22 views
29

Estoy tratando de trabajar en el curso de capacitación de Rx Extensions de Dan Sullivan en PluralSight. Es un material excelente, pero desafortunadamente Rx parece haber cambiado, a pesar de que el curso solo se publicó hace un mes.Rx for .NET - ¿Qué pasó con Scheduler.Dispatcher?

La mayoría de los cambios son triviales (cambio de tres dlls a un dll único, cambio en los espacios de nombres utilizados, etc.) pero me cuesta entender qué debo usar en lugar de Scheduler.Dispatcher en el ejemplo de Dan. No puedo ver nada obvio en las propiedades que están disponibles en el Programador.

Aquí está el código que estoy tratando de conseguir trabajar con la biblioteca (refactorizado?) Rx (la versión estable currenly 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))); 

Qué debo utilizar para invocar el código de Observadores (Resultados .AppendText) en el hilo original de Dispatcher?

Respuesta

41

El DispatcherScheduler se ha movido al ensamblaje System.Reactive.Windows.Threading. Si está utilizando NuGet, está en Rx-WPF

+0

Gracias. Me referí a esa dll, pero me cuesta entender qué debo usar para reemplazar el método "ObserveOn" en la consulta anterior. Puedo hacer referencia a un DispatcherScheduler pero no tiene un método de suscripción para llamar. – irascian

+5

Puede simplemente cambiarlo a 'ObserveOnDispatcher()', que es un método de extensión definido en el ensamblado 'System.Reactive.Windows.Threading'. –

+0

¡Gracias! Gracias. Así que mi última línea se convierte en observableQuery.ObserveOnDispatcher(). Subscribe (n => Results.AppendText (string.Format ("{0} \ n", n))); – irascian

1

A partir del 2016-11-25, la referencia es RX-XAML.

Lamentablemente, Microsoft eliminó la RX v2.2.5 de la versión a favor de RX v3.1.0, que es completamente multiplataforma. Sin embargo, las bibliotecas multiplataforma no son compatibles con WPF. Esto significa que ahora es difícil encontrar el paquete NuGet que funciona con WPF. Para solucionar este problema, si está usando WPF + .NET 4.5, instale cualquier paquete NuGet con una dependencia en RX-XAML. Por ejemplo, reactiveui-blend depende de RX-XAML v2.2.5, por lo que esta ahora funcionará:

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

Es más fácil para mí ejecutar 'Install-Package Rx-Xaml -Version 2.2.5' desde la consola de Package Manager dentro de VS. –

+0

¡Agradable! Esto parece más simple, lo usaré a partir de ahora. – Contango