我正试图了解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());
或者你可以通过使用这个过载来简化它
Observable.FromEventPattern<StGroupItemsModified>(...)