Этот ответ вдохновлен Xamarin / Azure evangelist, Брэндоном Минником -> взгляните на его проект, где он обрабатывает подобную ситуацию со следующим кодом:
Так что можетмы отнимаем от вышесказанного?Если вы посмотрите на контекст, он соединил свои виды с моделями представления в стиле MVVM.Однако различные библиотеки требуют, чтобы определенные методы вызывались из основного потока.В этом суть проблемы, и именно это может решить этот код.
Итак, чтобы принять приведенный выше код для проблемы геолокации, рассмотренной в вопросе, я сделал следующее:
Task<Xamarin.Essentials.Location> GetLocationFromPhone()
{
var locationTaskCompletionSource = new TaskCompletionSource<Xamarin.Essentials.Location>();
Device.BeginInvokeOnMainThread(async () =>
{
locationTaskCompletionSource.SetResult(await Geolocation.GetLastKnownLocationAsync());
});
return locationTaskCompletionSource.Task;
}
Я использую вышеупомянутое из моей ViewModel из Задачи.Что-то вроде следующего.
async Task ExecuteGetGeoLocationCommand()
{
try
{
var locationFromPhone = await GetLocationFromPhone().ConfigureAwait(false);
if (locationFromPhone is null)
return;
_location = locationFromPhone;
if (_location != null)
{
Console.WriteLine($"Latitude: {_location.Latitude}, Longitude {_location.Longitude}, Altitude: {_location.Altitude}");
}
else
{
Console.WriteLine($"Exiting geolocation");
}
catch (FeatureNotSupportedException fnsEx)
{
}
catch (Exception ex)
{
}
}
}
Надеюсь, это поможет кому-то еще!