2012-06-27 10 views
6

Cuando utilizo el WinRT Geolocalizador, que esporádicamente sale el error:"Pipe está siendo cerrada" cuando se utiliza el WinRT Geolocalizador

{"The pipe is being closed. (Exception from HRESULT: 0x800700E8)"} 

De nuevo, esto es esporádica. ¿Alguna sugerencia?

Windows.Devices.Geolocation.Geoposition _Postion = null; 
try 
{ 
    var _Locator = new Windows.Devices.Geolocation.Geolocator(); 
    _Postion = await _Locator.GetGeopositionAsync(); 
} 
catch { /* continue, null okay */ } 

if (_Postion == null) 
{ 
    /* use alternate */ 
} 
else 
{ 
    /* use location */ 
} 

Esto está en el simulador, pero también cuando se ejecuta en la máquina local. Por lo general, este error NO dará como resultado un descanso. Acaba la aplicación de repente. Cuando da como resultado un descanso. Ese es el error resultante.

+1

No podemos ayudar a menos que publique el código. Cuando publiques el código, me quitaré mi voto negativo. –

+1

@Jerry Nixon, buen ejemplo, su ejemplo de código me ayudó a comprender el mensaje de error winrt inútil – Calanus

+0

@Jerry Nixon ¿Puede ayudarme con la solución para esto? Recibo este error cuando ejecuto mi aplicación de Windows Store en la tableta con una red móvil. –

Respuesta

1

Descubrí que esto ocurría cuando su localización está configurada como "simulada". Si está ejecutando su aplicación usando el simulador, puede desactivarla haciendo clic en el ícono mundial (entre la pantalla y la configuración de la cámara), luego desmarque "Usar ubicación simulada "opción

+0

¿Dónde obtenemos esta opción en tableta? –

0

Creo que la causa raíz de este problema es que GeoLocator está utilizando la API de ubicación.

El error que está recibiendo es HRESULT_FROM_WIN32 (ERROR_NO_DATA), que parece correlacionar con la cadena amistosa (pero inútil, en este caso) "La tubería se está cerrando". Ese es el error esperado cuando la plataforma no ve que su sensor proporcione un informe válido.

0

También enfrenté una excepción esporádica similar en mi proyecto. Mira la captura de pantalla de la imagen que adjunté. enter image description here

Aquí está la solución que funcionó para mí, pero no estoy seguro si funcionará para otros.

Esta fue mi código antes:

Geolocator loc = new Geolocator(); 
try 
{ 
     loc.DesiredAccuracy = PositionAccuracy.High; 

     Geoposition pos = await loc.GetGeopositionAsync(); 
     var lat = pos.Coordinate.Point.Position.Latitude; 
     var lang = pos.Coordinate.Point.Position.Longitude; 
     Status = loc.LocationStatus; 

     return GetGpsInfoObject(pos); 
} 
catch (System.UnauthorizedAccessException) 
{ 
     return null; 
} 

he cambiado el código para:

Geolocator loc = new Geolocator(); 
try 
{ 
     loc.DesiredAccuracy = PositionAccuracy.High; 

     Geoposition pos = await loc.GetGeopositionAsync(); 
     var lat = pos.Coordinate.Point.Position.Latitude; 
     var lang = pos.Coordinate.Point.Position.Longitude; 
     Status = loc.LocationStatus; 

     return GetGpsInfoObject(pos); 
} 
catch (Exception) 
{ 
      return null; 
} 
+0

así que simplemente devuelve 'null' cuando ocurre una excepción? – demo

Cuestiones relacionadas