【问题标题】:Reactive Extension - problem use method from old version in new versionReactive Extension - 新版本中旧版本的问题使用方法
【发布时间】:2011-09-11 20:19:46
【问题描述】:

我是 .NET 的新手,我以前的工作是 PLC 程序员。我有旧的应用程序,在其中我使用了 .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

我不知道在新版本中必须使用哪种方法才能获得相同的功能。

感谢您的建议。

【问题讨论】:

    标签: c# observer-pattern system.reactive


    【解决方案1】:

    在最新版本(1.1.10425.0)中,需要使用FromEventPattern()

    【讨论】:

    • 太棒了!这修复了视频“DevCamp 2010 Keynote - Rx: Curing your asynchronous Programming blues”@ 44.50 中代码中的错误。
    【解决方案2】:

    Rx 论坛的官方帖子http://social.msdn.microsoft.com/Forums/en-US/rx/thread/527002a3-18af-4eda-8e35-760ca0006b98 记录了他们在 1.1.10425.0 中所做的更改。 Lee Campbell 在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 中再次调用)。您可能需要确保需要执行两次。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 1970-01-01
      • 2021-10-20
      相关资源
      最近更新 更多