サブジェクト クラスのペアを使用して、2 セットのイベント シーケンスを起動しようとしています。このアプリケーションは描画アプリケーションであり、ユーザーがクリックすると一方のサブジェクトが onNext を起動し、ユーザーがダブルクリックすると他方のサブジェクトが OnNext を起動します。上記の場合にオブザーバブルを返す GetClick および GetDoubleClick メソッドを作成しましたが、正常に動作しているようです。以下のコードの問題は、クリック シーケンスを起動する最初のサブジェクトで onNext を呼び出した場合、ダブル クリック オブザーバブルが呼び出されないことです。最初のサブジェクトの onNext 呼び出しをコメントアウトすると、ダブルクリックのオブザーバブルが期待どおりに起動されます。誰でも以下のコードとそのアイデア/考えを見てもらえますか? 以下のコードの問題行にコメントを追加しました
public static KeyValuePair<IObservable<MapPoint>, IObservable<PointCollection>>
DrawPointsDynamic(this Map map)
{
PointCollection pc = new PointCollection();
Subject<Point> ptSubject = new Subject<Point>();
Subject<PointCollection> ptsSubject = new Subject<PointCollection>();
IObservable<Point> ptObs = ptSubject.Hide();
IObservable<PointCollection> ptsObs = ptsSubject.Hide();
map.GetClick()
.Subscribe(next =>
{
var p = map.ScreenToMap(next.EventArgs.GetPosition(map));
ptSubject.OnNext(p); //If I leave this line in, the subscription to the doubleClick below does not get called. If comment it out, the subscription below does get called as expected;
pc.Add(p);
});
map.GetDoubleClick()
.Subscribe(next =>
{
ptsSubject.OnNext(pc);
pc = new ESRI.ArcGIS.Client.Geometry.PointCollection();
});
KeyValuePair<IObservable<MapPoint>, IObservable<ESRI.ArcGIS.Client.Geometry.PointCollection>> obs =
new KeyValuePair<IObservable<MapPoint>, IObservable<ESRI.ArcGIS.Client.Geometry.PointCollection>>
(ptObs, ptsObs);
return obs;
}
また、 Hide() が何をするのかよくわかりません。すべての例にemがあるように見えるので、私はそれを使用しています。身元を隠すことの本当の意味は何ですか?