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

Posted

技术标签:

【中文标题】Compact Framework - System.Threading.Timer 在用户关闭屏幕时停止【英文标题】:Compact Framework - System.Threading.Timer stops when the user turns off the screen 【发布时间】:2008-11-12 15:28:38 【问题描述】:

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

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

我真的希望它能像其他后台应用程序一样工作。我该怎么做才能让它在不消耗太多电池电量的情况下工作?

【问题讨论】:

【参考方案1】:

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

【讨论】:

回答自己的问题是件好事。而且您找到的解决方案是一个非常好的解决方案(尽管我可能有偏见)。 在 Google 搜索中发现了这个,指向 LIT 的链接正是我所需要的,谢谢!【参考方案2】:

你无能为力,AFAIK。待机模式旨在暂停处理器以节省电力,如果处理器没有运行,您的代码将无法执行。您的应用程序可以采取一些措施来防止设备进入待机模式,但这确实是不可取的。

【讨论】:

那么 ActiveSync 是如何做到的呢?将其关闭并放入口袋后,我如何仍能收到电子邮件? 所有好问题。我认为实际上处理器在待机时并没有完全关闭,可以通过 ActiveSync 或手机或无线“卡”远程重新打开。只是不是你的代码,因为它没有在待机模式下运行。【参考方案3】:

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

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

【讨论】:

【参考方案4】:

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

【讨论】:

CE 中没有 WaitableTimer【参考方案5】:

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

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

【讨论】:

以上是关于Compact Framework - System.Threading.Timer 在用户关闭屏幕时停止的主要内容,如果未能解决你的问题,请参考以下文章

Compact Framework 3.5 设置表单父级

如何使用 Compact Framework 加粗文本

.NET Compact Framework 中的 OCR 图像

.NET Compact Framework,属性性能问题和字段更改跟踪

在 .NET Compact Framework 中使用简单的 SOAP

Compact Framework - 是不是有可用的 MVC 框架/库?