在Windows应用商店应用程序(Windows 8.1)中使用GeoLocator时“管道正在关闭”错误?

时间:2016-03-04 15:31:13

标签: c# windows-8.1 bing-maps

我在Windows 8.1应用程序中工作,我使用下面提到的代码找到用户的当前位置。现在,当我使用移动网络在平板电脑上运行我的应用程序时,应用程序崩溃,但它在Wifi上工作正常。有人可以为此提出解决方案吗?

            geolocator = new Geolocator();
            geolocator.DesiredAccuracy = PositionAccuracy.Default;
            geolocator.DesiredAccuracyInMeters = 1000;
            geolocator.MovementThreshold = 5;
            geolocator.ReportInterval = 500;
            try
            {
                Geoposition mygeoPosition = await geolocator.GetGeopositionAsync();
            }
            catch(UnauthorizedAccessException ex)
            {
                UserMessageUtil.ShowMessage("Location is disabled in Settings");
                await Launcher.LaunchUriAsync(new Uri("ms-settings-location:"));
            }
            geolocator.PositionChanged += geolocator_PositionChanged;

我经常检查笔记本电脑,所以我过去没有遇到这个问题,但现在我有一台同时具有3G和WIFI连接的平板电脑,当我在平板电脑上运行应用程序并尝试获取当前位置时,出现错误

更新

我有时也会得到组或资源未处于正确状态以执行请求的操作。 (来自HRESULT的异常:0x8007139F)错误在线

Geoposition mygeoPosition = await geolocator.GetGeopositionAsync();

当我在移动网络

上连接时,我收到了这两个错误

2 个答案:

答案 0 :(得分:1)

使用更大的移动阈值开始。大多数GPS设备的精度仅为15米。将移动阈值设置为5可能太小并导致问题。

另请参阅使用其中一个位置准确度枚举器:

geolocator.DesiredAccuracy = Windows.Devices.Geolocation.PositionAccuracy.high;

答案 1 :(得分:1)

这些都是非常低级别的Windows错误代码。无论出现什么问题,都要远离代码,大致是设备驱动程序级别。或者它是由中间软件层重用的错误代码,这是WinRT中非常常见的犯罪。你必须要记住,网络中有很多很多东西都可能出错,而且你总是得不到很好的诊断。好吧,几乎没有。

"管道正在关闭"是ERROR_NO_DATA。该错误标识符很可能比消息更具代表性。

"组或资源未处于正确状态"是ERROR_INVALID_STATE。同样,该标识符比消息更加明智。

我的电话:你的蜂窝网络连接很不稳定。无论是因为收音机不稳定,还是因为它们之间存在蹩脚的反恶意软件。你可以很容易地消除后者。但前者总是发生在某人机器上。因此,编写代码以适应这种网络故障, not 只捕获UnauthorizedAccessException。为Exception写下另一个捕获并显示"我们很抱歉,服务暂时不可用"风格的消息。也许只要用户知道,你就可以通过记住以前的位置来对它进行创可贴。