2011-06-09 19 views
6

Soy novato en .NET mi trabajo anterior era el programador de PLC. Tengo una aplicación antigua en la que utilicé Reactive Extension para .NET.Extensión reactiva - método de uso problemático de la versión anterior en la nueva versión

No mantengo esta aplicación por mucho tiempo. Ahora descargué una nueva versión para Reactive Extension pero tengo un problema con el uso del código anterior.

Sé que algunas partes en Rx han cambiado.

Aquí es un código de problema de siempre:

Observable.FromEvent<PropertyChangedEventArgs>(this, "PropertyChanged") 
    .Where(e => e.EventArgs.PropertyName == "Nick") 
    .Select(_ => this.Nick) 
    .Where(text => text.Length > 3) 
    .Do(LoadUser) 
    .Throttle(TimeSpan.FromSeconds(3000)) 
    .Subscribe(LoadUser); 

Tengo este excepciones:

Error 3 Argument 1: cannot convert from 'Spirit.ViewModels.AddFriendViewModel' to 'System.Action<System.Action<System.ComponentModel.PropertyChangedEventArgs>>' E:\C#_Projects\Pokec_Messenger\Spirit_Caliburn_Micro_v1.0\ViewModels\AddFriendViewModel.cs 123 60 Spirit_Caliburn_Micro_v1.0 
Error 4 Argument 2: cannot convert from 'string' to 'System.Action<System.Action<System.ComponentModel.PropertyChangedEventArgs>>' E:\C#_Projects\Pokec_Messenger\Spirit_Caliburn_Micro_v1.0\ViewModels\AddFriendViewModel.cs 123 65 Spirit_Caliburn_Micro_v1.0 
Error 2 The best overloaded method match for 'System.Reactive.Linq.Observable.FromEvent<System.ComponentModel.PropertyChangedEventArgs>(System.Action<System.Action<System.ComponentModel.PropertyChangedEventArgs>>, System.Action<System.Action<System.ComponentModel.PropertyChangedEventArgs>>)' has some invalid arguments E:\C#_Projects\Pokec_Messenger\Spirit_Caliburn_Micro_v1.0\ViewModels\AddFriendViewModel.cs 123 13 Spirit_Caliburn_Micro_v1.0 

No sé qué método debo utilizar en la nueva versión para la misma funcionalidad.

Gracias por su asesoramiento.

Respuesta

7

En la última versión (1.1.10425.0), es necesario utilizar FromEventPattern()

+0

Brilliant! Esto corrigió el error en el código en el video "DevCamp 2010 Keynote - Rx: curando sus errores de programación asincrónicos" @ 44.50. – Contango

3

Los foros oficiales de Rx publicar aquí http://social.msdn.microsoft.com/Forums/en-US/rx/thread/527002a3-18af-4eda-8e35-760ca0006b98 tiene un relato de los cambios que se hicieron en 1.1.10425.0. Lee Campbell tiene una buena reseña del impacto de algunos de estos cambios en http://leecampbell.blogspot.com/2011/06/rx-v1010425breaking-changes.html. Compartí mi experiencia actualizando mis muestras antiguas al http://www.thinqlinq.com/Post.aspx/Title/Updating-Reactive-Samples-to-10425-build también.

En su caso, está utilizando el método FromEvent con la cadena del nombre del evento. Esta firma se movió a FromEventPattern. Probablemente pueda hacer una búsqueda global y reemplazar en FromEvent (y cambiarlo a FromEventPattern (sin tener muchos problemas)

Además, parece que está llamando al LoadUser dos veces en este ejemplo (en Do y luego nuevamente en Subscribe). Es posible que desee asegurarse de que necesita hacer eso dos veces

Cuestiones relacionadas