Похоже, исправление было заблокировать использование первого значения и получение его из второго события:
bool gpsReady = false;
void watcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> e)
{
if (gpsReady)
{
latitude = e.Position.Location.Latitude.ToString("0.0000000000");
longitude = e.Position.Location.Longitude.ToString("0.0000000000");
locReady = true;
}
gpsReady = true;
}
Я все еще не понимаю, почему я не получаю больше событий илипочему сначала запускается неверное значение, но приведенный выше код, похоже, работает.
Одно замечание для всех, кто пытается это сделать, - вы можете подумать, что получение значения в событии StatusChanged будет работать, например, так:
case GeoPositionStatus.Ready:
latitude = watcher.Position.Location.Latitude.ToString("0.0000000000");
longitude = watcher.Position.Location.Longitude.ToString("0.0000000000");
break;
Я не знаю почему, но вышеприведенный код, кажется, работал идеально, когда я работал, подключенный к отладчику, а затем часто зависал (то есть событие не срабатывало, и мой пользовательский интерфейс, казалось, завис) в практическом использовании.Мне никогда не удавалось воспроизвести проблему, пока она была подключена к отладчику.
ОБНОВЛЕНИЕ: похоже, это не всегда работает.В некоторых случаях он не срабатывает во второй раз, и поэтому мой код никогда не завершает работу.Если кто-то может предоставить дополнительную информацию об этом, которая поможет мне приблизиться к простому фактическому текущему местоположению устройства, я обязательно отмечу ваш ответ как ответ.Спасибо!