我是.NET的新手,我之前的工作是PLC程序员。我有旧的应用程序,我使用Reactive Extension for .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
我不知道在新版本中我必须使用哪种方法来获得相同的功能。
感谢您的建议。
答案 0 :(得分:7)
在最新版本(1.1.10425.0)中,您需要使用FromEventPattern()
答案 1 :(得分:3)
此处的官方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中)。你可能想确保你需要做两次。