如何在通用事件可观察对象上取间隔
本文关键字:对象 观察 事件 | 更新日期: 2023-09-27 18:15:34
我有一个简单的可观察对象来跟踪鼠标移动:
IObservable<EventPattern<MouseEventArgs>> mouseTracker = Observable.FromEventPattern<MouseEventArgs>(form1, "MouseMove");
mouseTracker.Subscribe(evt =>
{
rxLabel.Text = evt.EventArgs.Location.ToString();
});
如何附加Interval()方法到这个可观察对象?它的所有代码示例都提到了"控制台"。
不适合这种情况。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
来做这个。它可以取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线程上操作。