OpenCFNet的Socket SoMo 650/655设备上的LargeIntervalTimer

时间:2012-11-21 21:58:30

标签: .net sockets windows-mobile opennetcf

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

除了OpenNETCF库的LargeIntervalTimer功能之外,几乎所有内容都可以正常工作。如果设备连接到PC,定时器确实有效,但是否则设备会进入暂停模式,此定时器无法唤醒。

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

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


编辑:

感谢Josef的有用建议,以及编写测试应用程序的麻烦。据我所知,事件正在被正确地添加到数据库中。如果我运行你的应用程序并按下Start,然后按Stop,我会看到有一个新条目(由测试应用程序本身创建的条目)。但是,如果我按下“开始”然后再打开我自己的应用程序,然后再切换回按住“停止”,我会收到2个新条目。对于两个设备,工作的iPaq和有问题的Socket都是如此。

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

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


编辑2:

我注意到Socket SoMo 655运行的是Windows CE,而Socket SoMo 650(应用程序运行正常)运行的是Windows Mobile 6.5。这些移动操作系统会干扰OpenNETCF库吗?

1 个答案:

答案 0 :(得分:2)

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

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

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

enter image description here enter image description here

启动应用程序后,只需单击“开始”,即可初始化新的LargeTimer。然后该工具获取通知事件列表并将其转储到文本框中。

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

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

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

如果LargeTimer无法在您的设备上运行,则可能是因为未在数据库中输入事件。使用该工具,您可以验证旧条目和新条目。

〜约瑟夫