如何在通用事件可观察的时间间隔?

时间:2015-10-01 13:10:52

标签: c# system.reactive

我有一个跟踪鼠标移动的简单observable:

TimeStamp

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

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

1 个答案:

答案 0 :(得分:3)

@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线程上不是操作符。