Reactive Extension - метод использования проблемы из старой версии в новой версии - PullRequest
6 голосов
/ 09 июня 2011

Я новичок в .NET, моей предыдущей работой был программист ПЛК.У меня есть старое приложение, в котором я использовал Reactive Extension для .NET.

Я не поддерживаю это приложение долгое время.Теперь я скачал новую версию для Reactive Extension, но у меня проблема с использованием старого кода.

Я знаю, что некоторые части в Rx были изменены.

Вот проблема старого кода:

    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);

Я получил следующие исключения:

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

Я не знаю, какой метод я должен использовать в новой версии для той же функциональности.

Спасибо за совет.

Ответы [ 2 ]

7 голосов
/ 09 июня 2011

В последней версии (1.1.10425.0) вам необходимо использовать FromEventPattern()

3 голосов
/ 10 июня 2011

Официальное сообщение Rx Форумы здесь http://social.msdn.microsoft.com/Forums/en-US/rx/thread/527002a3-18af-4eda-8e35-760ca0006b98 содержит описание изменений, которые они внесли в 1.1.10425.0. Ли Кэмпбелл хорошо описал влияние некоторых из этих изменений на http://leecampbell.blogspot.com/2011/06/rx-v1010425breaking-changes.html.. Я также поделился своим опытом обновления моих старых сэмплов на http://www.thinqlinq.com/Post.aspx/Title/Updating-Reactive-Samples-to-10425-build.

В вашем случае вы используете метод FromEvent со строкой имени события. Эта подпись была перемещена в FromEventPattern. Вероятно, вы можете выполнить глобальный поиск и замену в FromEvent (и изменить его на FromEventPattern (без особых проблем).

Кроме того, вы, кажется, дважды вызываете LoadUser в этом примере (в Do и затем снова в Subscribe). Возможно, вы захотите сделать это дважды.

...