我在我的应用中使用了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,但还没有找到一个有效的解决方案。为什么它在某些代码中起作用,而在某些代码中却没有。这种行为的原因是什么?
答案 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)
听起来这个位置是缓存的!第一次调用方法时,它会尝试获取您的位置(如果您在建筑物内,这可能需要几秒钟),第二次它似乎使用缓存位置。