4

我正在开发在 .NET Compact 3.5 上运行的 Windows Mobile 6.1/6.5 应用程序。这个应用程序多年来一直在旧的 HP iPaq 210 上成功运行,但我在让它在 Socket SoMo 655 上运行时遇到了一些麻烦。

除了 OpenNETCF 库的 LargeIntervalTimer 功能外,几乎所有东西都可以正常工作。如果设备与 PC 保持连接,则计时器确实可以工作,但否则设备会进入暂停模式,该计时器无法唤醒。

现在,这就是 LargeIntervalTimer 的全部目的。它唤醒已进入挂起模式的设备,以便它可以执行某种任务。它在 iPaq 上正常工作,将它从看似任何类型的睡眠模式中唤醒。但是,在 SoMo 上,当设备放置足够长的时间以关闭时,计时器不会触发。

有没有人有任何想法?是否有另一种方法可以将设备从我可以在托管代码中使用的任何电源状态唤醒?


编辑:

感谢 Josef 的有用建议,感谢您不厌其烦地编写测试应用程序。据我所知,该事件已正确添加到数据库中。如果我运行您的应用程序并立即按开始,然后按停止,我会看到有 1 个新条目(由测试应用程序本身创建的条目)。但是,如果我在切换回并按停止之前先按开始,然后打开我自己的应用程序,我会得到 2 个新条目。这对两种设备都是如此,工作的 iPaq 和有问题的 Socket。

我认为问题一定与允许设备进入挂起模式后 Socket 的电源状态有关。当 Socket 通过 USB 连接到我的 PC 时,LargeIntervalTimer 可以正常工作,我认为这是因为设备在连接时永远不会完全进入睡眠状态。但是,如果我拔下设备并允许它进入挂起模式,则计时器根本不会激活。

无论如何,谢谢你的帮助。我仍然对想法持开放态度,但似乎没有一个我刚刚忽略的简单解决方案......


编辑2:

我注意到 Socket SoMo 655 运行的是 Windows CE,而 Socket SoMo 650(应用程序在其上运行良好)运行的是 Windows Mobile 6.5。这些干扰 OpenNETCF 库的移动操作系统之间是否存在差异?

4

1 回答 1

2

OpenNetCF LargeIntervalTimer 使用通知数据库并添加基于时间的事件。

如果此操作失败或通知引擎未触发事件(警报),LargeIntervalTimer 将失败。

我在https://code.google.com/p/win-mobile-code/source/browse/#svn%2Ftrunk%2FOpenNetCF_LargeTimer完成了一个测试应用程序(bin 目录中也有二进制文件)。

在此处输入图像描述 在此处输入图像描述

应用程序启动后,只需单击开始,一个新的 LargeTimer 将被初始化。然后该工具获取通知事件列表并将它们转储到文本框。

当您单击(停止)时,应用程序会停止 LargeTimer 并执行另一个事件列表。然后比较列表,如果有新条目,您将获得内容。

 New entry: 889192489, \\.\Notifications\NamedEvents\50f2c337-5b1a-4b78-8923-53df9e009980

OpeneNetCF 似乎不会删除旧条目,它总是创建新的唯一命名事件条目。

如果 LargeTimer 在您的设备上无法正常工作,可能是由于事件未在数据库中输入造成的。使用该工具,您可以验证旧条目和新条目。

~约瑟夫

于 2012-11-22T13:53:17.650 回答