使用WinRT Geolocator时“管道正在关闭”

时间:2012-06-27 18:32:30

标签: c# geolocation windows-runtime

当我使用WinRT Geolocator时,我偶尔会收到错误:

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

同样,这是零星的。有什么建议吗?

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

这是在模拟器中,但也在本地计算机上运行时。 通常这个错误不会导致中断。 它突然结束了应用程序。 当它确实导致休息时。 这是由此产生的错误。

3 个答案:

答案 0 :(得分:1)

我发现当您的本地化设置为“模拟”时会发生这种情况,如果您使用设备模拟器运行应用程序,可以通过单击世界图标(显示和相机设置之间)禁用此功能,然后取消选中“使用模拟”位置“选项

答案 1 :(得分:0)

我认为此问题的根本原因是GeoLocator正在使用Location API。

您获得的错误是HRESULT_FROM_WIN32(ERROR_NO_DATA),它似乎映射到友好(但在这种情况下无用)字符串“管道正在关闭”。当平台没有看到您的传感器提供有效报告时,这是预期的错误。

答案 2 :(得分:0)

我的项目中也遇到了类似的零星异常。查看我附上的图片截图。enter image description here

这是适用于我的解决方案,但我不确定它是否适用于其他人。

这是我之前的代码:

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

我将代码更改为:

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