好吧,即時通訊有另一個反應擴展遊戲,特別是wp7。WP7 - 使用RX,訂閱只觸發一次,但OnNext()始終觸發?
我看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()。從簡短的閱讀來看,我認爲這會阻止向用戶流出相同的價值?所以我使用它的位置跟蹤,位置跟蹤,如果電話位於同一位置,並且GeoCoordinate沒有改變,那麼將它毫無意義地發送給訂戶,這樣就可以阻止它?
關於這兩個代碼片段如何相關的一些背景將有所幫助。是第二個引用MyLocation.StartGettingLocations的第一個片段嗎? –
對不起,在我離開工作之前我很快就提出了這個問題。如果你可以從EDIT中看到,我知道這個問題只需要理解它。 – Gaz83
@ Gaz98:你是對的。除非值已更改,否則它不會向觀察者推送新值。刪除.DistinctUntilChanged()行爲將導致相同的值被推送給觀察者。 –