首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用传感器恢复WP8应用程序

用传感器恢复WP8应用程序
EN

Stack Overflow用户
提问于 2013-02-11 17:43:32
回答 2查看 1.1K关注 0票数 4

在我的WP8应用程序中,我使用所有的传感器。加速度计,指南针(来自Windows.Devices.Sensors和Microsoft.Devices.Sensors )和斜度计。所有操作都很好,直到我按下按钮,然后再按Back按钮。我得到了一个带有“恢复.”消息的全黑屏幕,但什么都没有发生。一旦我得到了一个例外(从5次失败中只得到一次):

代码语言:javascript
复制
{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应用程序生命周期中,是否有正确使用传感器的最佳实践?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-15 06:28:44

这个问题比我想象的要复杂。我在这方面做了很多工作。我分享我的发现,因为我认为我的经验对以后的其他人也有帮助。

我通过服务类与传感器一起工作:这些类更新我的VM,在VM中我使用我的DispatcherHelper在UI上更新它们。我知道如果我想更新传感器的估值事件中的UI绑定属性,我需要使用dispatcherhelper调用这个更新,但我不知道如果它们与VM而不是视图通信时它们的行为。当我启动应用程序时,如果传感器有新的值,我在更新UI方面没有问题。我唯一的问题是,如果我想要停用(按下窗口按钮)和激活(按下回键)我的应用程序,我没有例外,我没有失去我的调试会话,但只有一个黑色的页面,“恢复…”。短信和运行进度栏什么都没发生。

我错过的是一个跨线程/访问异常。如果我使用UI绑定的数据执行此操作,则会引发异常,但在本例中则不会。

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

溶液

如果我在UI线程(使用我自己的DispatcherHelper)上的均衡器内进行更新,那么一切都很好。这是一个很好的经验教训,在与传感器和其他层/线程(VM,V)交互时始终要注意。

票数 3
EN

Stack Overflow用户

发布于 2013-02-12 00:51:13

这听起来确实是一个生命周期问题。

您是否尝试过在传感器上调用SensorBase.Stop(),从Microsoft.Devices.Sensors调用App.Deactivated事件,并在App.Activated事件上继续使用SensorBase.Start()?根据应用程序中需要传感器访问的页面数,您甚至可以覆盖OnNavigatedTo/OnNavigatedFrom方法并使用这些方法。

你不应该这样做,但取决于你的应用程序,这可能是一个好主意。(您的应用程序支持锁定屏幕空闲执行吗?有背景探员吗?它是否尝试在后台运行时获取传感器读数?)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14817738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档