Compact Framework - System.Threading.Timer在用户关闭屏幕时停止

时间:2008-11-12 15:28:38

标签: compact-framework power-management

我有一个应用程序需要“轮询”Web服务以查看用户是否有任何新消息在等待。我无法控制网络服务,因此我无法切换到“推送”机制,我每隔X秒钟就会发出请求,看看有什么可用。

我正在使用System.Threading.Timer来经常发出请求,但遇到了一些问题。最大的一点是,当手机进入“待机”模式时,它会停止运行(屏幕关闭,但仍能接听电话和电子邮件/ txt通知)。

我真的希望它的行为与其他后台应用程序一样。我能做些什么才能让它在没有太大耗电的情况下工作?

5 个答案:

答案 0 :(得分:4)

讨厌回答我自己的问题,但我被指向this,即使设备处于睡眠状态也能够执行。看起来它工作得很好。

答案 1 :(得分:1)

你无能为力,AFAIK。待机模式旨在暂停处理器以节省电量,如果处理器未运行,则代码无法执行。您的应用程序可以执行一些操作来阻止设备进入待机模式,但这根本不可取。

答案 2 :(得分:1)

是的。与MusiGenesis的回答类似,如果不保持设备正常运行,您将无法做很多事情。类似于某些手机会通知“游戏/应用程序正在运行”,因此您的电池被打了一圈。

如何从手机编写界面以利用短信(仍然有效)并让它向网络服务发送短信?这可能吗?我猜这种方法也可能会停止运行,但我认为这是一个想法?

答案 3 :(得分:1)

我不确定紧凑框架,但在Win32中有WaitableTimer可以将计算机从待机状态唤醒。它需要一些原生调用,因为.Net中没有包装器。

答案 4 :(得分:0)

虽然您无法修改Web服务,但您可以在客户端和原始Web服务之间添加第二个“影子”Web服务。影子Web服务可以轮询原始Web服务,然后将其发现的任何内容“推送”到PDA。

我认为你可能仍会遇到同样的问题。我从来没有从Web服务“推”,但我认为它基本上是通过让客户端初始调用webservice方法实现的,该方法将委托委托给客户端中的方法,然后web服务挂起。当webservice需要推送一些东西时,它会调用该委托。如果客户端在此期间进入待机模式,则从服务器调用委托的尝试将失败。