我正在尝试在我的Xamarin应用程序中获取GPS数据但它在等待后跳过代码并返回调用函数这里是我的代码。我已经看到了另一个相关的问题,但它不起作用。这是我的代码
namespace googleMap
{
public partial class MainPage : ContentPage
{
public string apidata;
public MainPage()
{
InitializeComponent();
apiDataAsync();
}
public async void apiDataAsync()
{
await MapLoadAsync();
}
private async Task MapLoadAsync()
{
var locator = CrossGeolocator.Current;
locator.DesiredAccuracy = 20;
var ticks = 10000;
TimeSpan ts = new TimeSpan(ticks);
var location = await locator.GetPositionAsync(TimeSpan.FromSeconds(20), null, true);
var latitude = location.Latitude.ToString();
var longitude = location.Longitude.ToString();
}
}
任何帮助都会受到赞赏。谢谢。
答案 0 :(得分:0)
它正在跳过,因为它击中了
var location = await locator.GetPositionAsync(TimeSpan.FromSeconds(20), null, true);
该方法返回调用者,直到await表达式完成。但是你不是在构造函数中等待它(因为你不能),所以它只是继续,并且任务失败。
您最好的选择是创建一个工厂,它将使用异步方法创建新的MainPage,工厂将await apiDataAsync()
。
但所有这些仅适用于apiDataAsync所做的事情。如果它非常快,请不要打扰,只需同步调用locator.GetPositionAsync。
var location = locator.GetPositionAsync(TimeSpan.FromSeconds(20), null, true).Result;