GetGeopositionAsync()永远不会完成,第二次调用时会起作用

时间:2013-09-10 08:02:32

标签: c# silverlight windows-phone-8 windows-phone

我在我的应用中使用了GetGeoPositionAsync()并且它在另一个功能的代码中工作正常,但是当我在我正在实现的功能中使用它时,它会在我第一次尝试调用它时冻结,并且正常工作第二次。我从另一个页面导航时调用此函数。这是代码:

   private async Task GetLocation()
   {
        Geolocator myGeolocator = new Geolocator();
        Geoposition myGeoposition = null;
        try
        {
            myGeoposition = await myGeolocator.GetGeopositionAsync();
        }
        catch (Exception ex)
        {
            if ((uint)ex.HResult == 0x80004004)
            {
                MessageBox.Show("Unauthorized access.");
            }
        }
    }

我试过浏览SO,但还没有找到一个有效的解决方案。为什么它在某些代码中起作用,而在某些代码中却没有。这种行为的原因是什么?

2 个答案:

答案 0 :(得分:4)

好的,所以我找到了解决方案:

        try
        {
            IAsyncOperation<Geoposition> locationTask = null;
            try
            {
                locationTask = myGeolocator.GetGeopositionAsync(TimeSpan.FromMinutes(1), TimeSpan.FromSeconds(3));
                myGeoposition = await locationTask;
            }
            finally
            {
                if (locationTask != null)
                {
                    if (locationTask.Status == AsyncStatus.Started)
                        locationTask.Cancel();

                    locationTask.Close();
                }
            }
        }

答案 1 :(得分:0)

听起来这个位置是缓存的!第一次调用方法时,它会尝试获取您的位置(如果您在建筑物内,这可能需要几秒钟),第二次它似乎使用缓存位置。