windows-phone-8 – 用传感器恢复WP8应用程序

在我的WP8应用程序中,我使用所有传感器. Accelerometer,Compass(来自 Windows.Devices.Sensors和来自Microsoft.Devices.Sensors)和Inclinometer.
一切正常,直到我按下Windows按钮,然后按下后退按钮.
我得到一个带有“Resuming …”消息的全黑屏幕,没有任何反应.一旦我得到一个例外(仅从5岁开始):

{System.Runtime.InteropServices.SEHException: External component has thrown an exception.
   at Microsoft.Devices.Sensors.SensorBase`1.PauseSensor()
   at Microsoft.Devices.Sensors.SensorBase`1.<>c__displayClass7.<.ctor>b__4(Object sender,NotificationCallbackEventArgs args)
   at Microsoft.Devices.Sensors.SensorCallback.MS.Internal.Interop.INotificationCallback.Pausing(XPauseType pauseType)
   at MS.Internal.Interop.NotificationService.NotificationPausing(XPauseType pauseType)
   at MS.Internal.FrameworkCallbacks.NotificationPausing(UInt32 pauseType)}

有人见过这个例外吗?

或者在wp8应用程序生命周期中是否有最佳的传感器正常工作?

谢谢

解决方法

这个问题比我想象的要复杂得多.我已经做了很多工作.我分享我发现的东西,因为我认为我的经验可以帮助后来的其他人.

我通过服务类使用传感器:这些类更新我的VM,在VM中我使用dispatcherHelper在UI上更新这些类.我知道是否要更新传感器的valuechanged事件中的UI绑定属性我需要在eventhandler中使用dispatcherhelper调用此更新,但我不知道的是,如果他们与VM而不是Views进行通信,他们的行为方式.当我启动应用程序时,如果传感器具有新值,我在更新UI时没有任何问题.我唯一的问题是在这种情况下,如果我想停用(按下Windows按钮)并激活(按下后退按钮)我的应用程序,我也没有例外,我没有丢失我的调试会话但只有一个黑色页面“恢复…“文本和正在运行的进度条,没有任何反应.

我错过的是一个crossthread / access异常.如果我使用UI绑定数据执行它会抛出异常,但在这种情况下它没有.

另一件事:加速度计(我的版本只与加速度计配合使用)与仿真器配合使用,但在设备上却没有.我认为模拟器试图通过返回值来模拟加速器,但不是以正确的方式(没有线程问题).

如果我在UI线程上的事件处理程序内更新(使用我自己的dispatcherHelper),一切正常.这是一个很好的经验教训,在与传感器和其他层/线程(VM,V)交互时要始终注意.

相关文章

Windows2012R2备用域控搭建 前置操作 域控主域控的主dns:自...
主域控角色迁移和夺取(转载) 转载自:http://yupeizhi.blo...
Windows2012R2 NTP时间同步 Windows2012R2里没有了internet时...
Windows注册表操作基础代码 Windows下对注册表进行操作使用的...
黑客常用WinAPI函数整理之前的博客写了很多关于Windows编程的...
一个简单的Windows Socket可复用框架说起网络编程,无非是建...