2013-09-10 3 views
0

Я использовал GetGeoPositionAsync() в своем приложении, и он отлично работает в коде другой функции, однако при использовании его в функции, которую я в настоящее время реализую, он замораживает первый раз я пытаюсь назвать это, и работает во второй раз. Я вызываю эту функцию при переходе с другой страницы. Вот код:GetGeopositionAsync() никогда не заканчивается, работает pefect во второй раз, когда он называется

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

Если он работает в одном месте, а не другой, начать, глядя на то, что отличается между этими двумя местами. Где и как вы вызываете 'GetLocation()'? –

ответ

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(); 
       } 
      } 
     } 
+0

Отличное решение. Но у меня есть одна проблема, если я использую 'TimeSpan.FromSeconds (3)', тогда она покажет ошибку тайм-аута, если значение решетки решетки больше 3, тогда оно будет работать. еще одна вещь, я могу сократить интервал времени от 3 секунд до 1 секунды. потому что в моем приложении, если я устанавливаю значение меньше 4, произошла ошибка тайм-аута. – imdadhusen

0

Кажется, что позиция кэширована! В первый раз, когда вы вызываете метод, он пытается получить вашу позицию (это может занять много секунд, если вы находитесь внутри здания), во второй раз, похоже, используется кэшированная позиция.

Смежные вопросы