【发布时间】:2012-05-16 06:13:03
【问题描述】:
好吧,我又玩了一个响应式扩展,特别是 wp7。
我正在查看 GeoCoordinateWatcher 位置更改事件,如下所示
var subject = new BehaviorSubject<GeoCoordinate>(GeoCoordinate.Unknown);
var watcher = new GeoCoordinateWatcher(GeoPositionAccuracy.Default) { MovementThreshold = 0 };
watcher.PositionChanged += (o, args) =>
{
var newLocation = args.Position.Location;
if ((DateTime.Now - args.Position.Timestamp.DateTime) < locationTimeout)
{
subject.OnNext(newLocation);
}
};
我是这样订阅的
MyLocation.StartGettingLocations()
.Subscribe(pos =>
{
// Do something with the position
PlotLine.Locations.Add(pos);
bingMap.SetView(pos, 15);
});
应用程序运行,但问题是订阅侧的代码仅发生一次,如果我在主题中设置断点。OnNext(newLocation),我看到它不断被触发。
我做错了什么?
[编辑]
好的,我知道出了什么问题,代码(这不是我的,我只是从中学习)使用 DistinctUntilChanged()。我假设,通过简要阅读,这会阻止向订阅者输出相同的价值?所以就我使用它的目的而言,位置跟踪,如果手机在同一个位置并且地理坐标没有改变,那么将它发送给用户是没有意义的,所以它只是阻止它?
【问题讨论】:
-
有关这两个代码 sn-ps 如何关联的一些上下文将有所帮助。第一个 sn-p 是第二个中引用的 MyLocation.StartGettingLocations 吗?
-
很抱歉,我在下班前迅速提出了一些问题。如果您可以从 EDIT 中看到我知道问题只需要了解它。
-
@Gaz98:你是对的。除非值已更改,否则它不会将新值推送给观察者。删除 .DistinctUntilChanged() 行为将导致将相同的值推送给观察者。
标签: c# windows-phone-7 system.reactive