Reactive Linq Observable 在触发事件时不通知
Reactive Linq Observable doesn't notify when an event is fired
我正在努力了解 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()
?有什么想法吗?
您使用了错误的通用参数。
您的代码实际上抛出 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>(...)
我正在努力了解 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()
?有什么想法吗?
您使用了错误的通用参数。
您的代码实际上抛出 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>(...)