代码正在跳过并返回到调用函数

时间:2017-12-17 14:27:17

标签: c# xamarin

我正在尝试在我的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();
    }
}

任何帮助都会受到赞赏。谢谢。

1 个答案:

答案 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;