Ich habe ein Problem bei der Verwendung des von Microsoft bereitgestellten GPS-Emulators. Dies ist mein Code
public IGeoPositionWatcher<GeoCoordinate> Watcher { get; private set; }
public IObservable<GeoCoordinate> ObservableGeoCoordinate { get; set; }
private void InitializeGpsDevice()
{
try
{
if (Watcher == null)
{
Watcher = new GpsEmulatorClient.GeoCoordinateWatcher();
}
ObservableGeoCoordinate = CreateObservableGeoPositionWatcher();
Watcher.Start();
}
catch (Exception ex)
{
MessageBox.Show(string.Format("Failed to initialize GPS device:{0}", ex.Message), "GPS Error", MessageBoxButton.OK);
}
}
private IObservable<GeoCoordinate> CreateObservableGeoPositionWatcher()
{
var observable = Observable.FromEvent<GeoPositionChangedEventArgs<GeoCoordinate>>(
e => Watcher.PositionChanged += e,
e => Watcher.PositionChanged -= e
).Select(e => e.EventArgs.Position.Location);
return observable;
}
Nachdem ich mein IObservable-Objekt erstellt habe, verwende ich es auf diese Weise:
public MainPage()
{
InitializeDefaults();
InitializeComponent();
Loaded += OnLoaded;
}
private void OnLoaded(object sender, RoutedEventArgs e)
{
var observable = GpsHelper.Instance.ObservableGeoCoordinate;
observable
.ObserveOnDispatcher()
.Subscribe(OnPositionChanged);
}
private void OnPositionChanged(GeoCoordinate location)
{
Map.Center = location;
}
Aber das Ereignis OnPositionChanged wird nie ausgelöst. Kann jemand vorschlagen, warum?