当我使用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 */
}
这是在模拟器中,但也在本地计算机上运行时。 通常这个错误不会导致中断。 它突然结束了应用程序。 当它确实导致休息时。 这是由此产生的错误。
答案 0 :(得分:1)
我发现当您的本地化设置为“模拟”时会发生这种情况,如果您使用设备模拟器运行应用程序,可以通过单击世界图标(显示和相机设置之间)禁用此功能,然后取消选中“使用模拟”位置“选项
答案 1 :(得分:0)
我认为此问题的根本原因是GeoLocator正在使用Location API。
您获得的错误是HRESULT_FROM_WIN32(ERROR_NO_DATA),它似乎映射到友好(但在这种情况下无用)字符串“管道正在关闭”。当平台没有看到您的传感器提供有效报告时,这是预期的错误。
答案 2 :(得分:0)
我的项目中也遇到了类似的零星异常。查看我附上的图片截图。
这是适用于我的解决方案,但我不确定它是否适用于其他人。
这是我之前的代码:
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;
}