2012-06-27 16 views
6

Quando uso il WinRT Geolocator, ho sporadicamente ottengo l'errore:"Pipe è stato chiuso" quando si utilizza il WinRT Geolocator

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

Ancora una volta, questo è sporadica. Eventuali suggerimenti?

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 */ 
} 

Questo è nel simulatore, ma anche quando viene eseguito sulla macchina locale. Solitamente questo errore NON provoca un'interruzione. Termina immediatamente l'applicazione. Quando si verifica un'interruzione. Questo è l'errore risultante.

+1

Non possiamo aiutarvi a meno che non si registra il codice. Quando pubblichi il codice, toglierò il mio downvote. –

+1

@Jerry Nixon bello, il tuo esempio di codice mi ha aiutato a capire il messaggio di errore winrt inutile – Calanus

+0

@Jerry Nixon Puoi aiutarmi con la soluzione per questo? Ricevo questo errore quando eseguo l'app di Windows Store nel tablet con una rete cellulare. –

risposta

1

Ho capito che questo è accaduto quando la tua localizzazione è impostata come "simulata", se stai usando la tua app usando il simulatore di dispositivo puoi disabilitare questo facendo clic sull'icona mondiale (tra display e impostazioni della fotocamera), quindi deseleziona "Usa posizione simulata "opzione

+0

Dove otteniamo questa opzione nel tablet? –

0

Penso che la causa principale di questo problema è che GeoLocator utilizza l'API di posizione.

L'errore che si ottiene è HRESULT_FROM_WIN32 (ERROR_NO_DATA), che sembra mappare alla stringa amichevole (ma inutile, in questo caso) "La pipa viene chiusa." Questo è l'errore previsto quando la piattaforma non vede il sensore fornire un rapporto valido.

0

Ho anche affrontato una simile eccezione sporadica nel mio progetto. Guarda lo screenshot dell'immagine che ho allegato. enter image description here

Ecco la soluzione che ha funzionato per me, ma non sono sicuro se funzionerà per gli altri.

Questo è stato il mio codice prima:

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; 
} 

Ho cambiato il codice per:

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

quindi restituisci 'null' quando si verifica un'eccezione? – demo

Problemi correlati