2012-06-27 7 views
6

Wenn ich den WinRT Geolocator verwenden, ich sporadisch den Fehler:„Pipe wird geschlossen“, wenn der WinRT Geolocator mit

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

Auch dies ist sporadisch. Irgendwelche Vorschläge?

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

Dies ist im Simulator, aber auch auf lokalen Rechner ausgeführt. Normalerweise führt dieser Fehler NICHT zu einer Unterbrechung. Es beendet nur die App plötzlich. Wenn es zu einer Pause kommt. Das ist der resultierende Fehler.

+1

Wir können Ihnen nicht helfen, wenn Sie den Code schreiben. Wenn du den Code postest, werde ich meinen Downvote entfernen. –

+1

@Jerry Nixon nett, Ihr Codebeispiel hat mir geholfen, die nicht hilfreich WinRT Fehlermeldung zu verstehen – Calanus

+0

@Jerry Nixon Können Sie mir für diese mit der Lösung helfen? Ich bekomme diesen Fehler, wenn ich meine Windows Store App auf dem Tablet mit einem Mobilfunknetz betreibe. –

Antwort

1

Ich fand heraus, dass dies passierte, wenn Ihre Lokalisierung als "simuliert" festgelegt wurde. Wenn Sie Ihre App mit dem Gerätesimulator ausführen, können Sie dies deaktivieren, indem Sie auf das Weltsymbol (zwischen Anzeige- und Kameraeinstellungen) klicken simulierter Standort "Option

+0

Wo bekommen wir diese Option in Tablet? –

0

Ich denke, die Ursache für dieses Problem ist, dass GeoLocator Location API verwendet.

Der Fehler, den Sie erhalten, ist HRESULT_FROM_WIN32 (ERROR_NO_DATA), die auf die freundliche (aber nicht hilfreiche, in diesem Fall nicht hilfreiche) Zeichenfolge "Die Pipe wird geschlossen." Das ist der erwartete Fehler, wenn auf der Plattform kein gültiger Bericht von Ihrem Sensor angezeigt wird.

0

ich sah mir auch eine ähnliche sporadische Ausnahme in meinem Projekt. Schau dir den Screenshot an, den ich angehängt habe. enter image description here

Hier ist die Lösung, die für mich arbeitete, aber ich bin mir nicht sicher, ob es für andere funktioniert.

Dies war mein Code vor:

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

ich den Code geändert:

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

also nur 'null' zurückgeben, wenn irgendeine Ausnahme aufgetreten ist? – demo

Verwandte Themen