【问题标题】:Reactive Linq Observable doesn't notify when an event is firedReactive Linq Observable 在触发事件时不通知
【发布时间】:2015-11-27 09:57:34
【问题描述】:

我试图了解 Observable 模式,并基本上解决现有代码在触发事件时不通知的问题。

我观察到的事件是ResizeGroupItemEnded,定义为:

public event EventHandler<StGroupItemsModified> ResizeGroupItemEnded

所以,模式的设置如下:

private readonly IDisposable _groupUpdates;
private static readonly TimeSpan UpdateThrottle = TimeSpan.FromMilliseconds(300);
...
_groupUpdates = Observable.FromEventPattern<EventHandler<StGroupItemsModified>, PropertyChangedEventArgs>(e => groupUICtrl.ResizeGroupItemEnded += e, e => groupUICtrl.ResizeGroupItemEnded -= e)
                          .Throttle(UpdateThrottle)
                          .ObserveOn(SynchronizationContext.Current)
                          .Subscribe(x => RefreshVLines());
...
public void Dispose()
{
...
}

private void RefreshVLines()
{
  // We should be notified here when groupUICtrl.ResizeGroupItemEnded triggers
}

为什么在触发groupUICtrl.ResizeGroupItemEnded 时没有调用RefreshVLinesStep()?请问有什么想法吗?

【问题讨论】:

  • 这可能只是一个错字 - 但您订阅的是 RefreshVLines() 而不是 RefreshVLinesStep()。你能确认这是否是一个错字吗?
  • 是的,这是一个错字。感谢您的关注
  • 您显示的代码中没有任何内容可以解释发生了什么。您需要提供minimal reproducible example
  • 是的,这就是完整的代码,它显示了 Observable 模式的注册发生的位置。
  • 当您预计会有大量事件随后出现暂停,并且您只想响应暂停前的最后一个事件(例如,在搜索框中输入)时,使用限制。

标签: c# linq system.reactive observable


【解决方案1】:

您使用了错误的泛型参数。 你的代码实际上抛出了System.ArgumentException 异常

您应该将PropertyChangedEventArgs 更改为实际的事件参数,即StGroupItemsModified

_groupUpdates = Observable.FromEventPattern<EventHandler<StGroupItemsModified>, StGroupItemsModified>(e => groupUICtrl.ResizeGroupItemEnded += e, e => groupUICtrl.ResizeGroupItemEnded -= e)
                          .Throttle(UpdateThrottle)
                          .ObserveOn(SynchronizationContext.Current)
                          .Subscribe(x => RefreshVLines());

或者你可以使用this overload来简化它

Observable.FromEventPattern<StGroupItemsModified>(...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-28
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 1970-01-01
    • 2021-10-13
    • 2018-02-17
    相关资源
    最近更新 更多