如何对通用事件进行间隔观察?

How to take intervals on generic Event observable?

我有一个跟踪鼠标移动的简单可观察对象:

IObservable<EventPattern<MouseEventArgs>> mouseTracker = Observable.FromEventPattern<MouseEventArgs>(form1, "MouseMove");
mouseTracker.Subscribe(evt =>
{
    rxLabel.Text = evt.EventArgs.Location.ToString();
});

如何将 Interval() 方法附加到此可观察对象?它的所有代码示例都提到 "Console.WriteLine",这不适合这种情况。

IObservable<TimeInterval<long>> observable = Observable.Interval(TimeSpan.FromMilliseconds(750)).TimeInterval();
using (observable.Subscribe(
    x => Console.WriteLine("{0}: {1}", x.Value, x.Interval)))
{
    Console.WriteLine("Press any key to unsubscribe");
    Console.ReadKey();
}

@Gluck 的评论是正确的。您可以使用 Sample 来执行此操作。它可以将 TimeSpanObservable 作为参数。第一个变体只是尝试每隔 x 时间采样一次。第二个变体将尝试在每次采样 Observable 发出时发出。

用法是这样的:

IObservable<EventPattern<MouseEventArgs>> mouseTracker = 
    Observable.FromEventPattern<MouseEventArgs>(form1, "MouseMove");

//Will emit the latest value from mouseTracker, every 750 milliseconds
IObservable<EventPattern<MouseEventArgs>> sampledTracker = 
    mouseTracker.Sample(TimeSpan.FromMilliseconds(750));

sampledTracker
.ObserveOn(SynchronizationContext.Current)
.Subscribe(evt =>
{
    rxLabel.Text = evt.EventArgs.Location.ToString();
});

编辑

我添加了同步代码,因为示例默认情况下不会在 UI 线程上进行操作。