我有一个跟踪鼠标移动的简单observable:
TimeStamp
如何将Interval()方法附加到此可观察对象?它的所有代码示例都提到" Console.WriteLine",这不适用于这种情况。
IObservable<EventPattern<MouseEventArgs>> mouseTracker = Observable.FromEventPattern<MouseEventArgs>(form1, "MouseMove");
mouseTracker.Subscribe(evt =>
{
rxLabel.Text = evt.EventArgs.Location.ToString();
});
答案 0 :(得分:3)
@Gluck的评论是正确的。您可以使用Sample
执行此操作。可以使用TimeSpan
或Observable
作为参数。第一个变体只是尝试每隔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线程上不是操作符。