Compact Framework - System.Threading.Timer s'arrête lorsque l'utilisateur éteint l'écran

StackOverflow https://stackoverflow.com/questions/284300

Question

J'ai une application qui doit "interroger". un service Web pour voir si l'utilisateur a de nouveaux messages en attente. Je n'ai aucun contrôle sur le service Web, je ne peux donc pas passer à un "push". mécanisme, je suis coincé à faire une demande toutes les X secondes pour voir ce qui est disponible.

J'utilise un System.Threading.Timer pour effectuer la demande de temps en temps, mais je rencontre quelques problèmes. Le plus important est qu’il cesse de fonctionner lorsque le téléphone est envoyé en mode "veille". mode (écran désactivé, mais toujours capable de recevoir des appels et des notifications par e-mail / txt).

J'aimerais vraiment que cela se comporte comme d'autres applications en arrière-plan. Que puis-je faire pour que cela fonctionne sans trop épuiser la batterie?

Était-ce utile?

La solution

Je n'aime pas répondre à ma propre question, mais on m'a indiqué this , qui a pu fonctionner même lorsque l'appareil est en veille. On dirait que cela fonctionne parfaitement.

Autres conseils

Vous ne pouvez rien faire, autant que je sache. Le mode veille permet de suspendre le processeur pour économiser de l'énergie. Votre code ne peut pas être exécuté si le processeur n'est pas en cours d'exécution. Votre application peut faire certaines choses pour empêcher l'appareil de passer en mode veille, mais ce n'est vraiment pas recommandé du tout.

Oui. Semblable à la réponse de MusiGenesis, vous ne pourrez pas faire grand chose sans garder le périphérique opérationnel. Semblable à la façon dont certains téléphones informeront que " Fonctionnement du jeu / de l'application " et ainsi votre batterie est giflée.

Qu'en est-il de l'écriture d'une interface à partir de votre téléphone pour exploiter la messagerie texte (qui fonctionne toujours) et la faire envoyer un message texte au service Web? Cela serait-il possible? Je suppose que ce genre de méthode pourrait également cesser de fonctionner, mais je suppose que c'est une pensée?

Je ne suis pas sûr de la structure compacte, mais dans Win32, WaitableTimer peut réveiller l'ordinateur du mode veille. Il faut cependant quelques appels natifs, car il n’ya pas de wrapper dans .Net.

Bien que vous ne puissiez pas modifier le service Web, vous pourrez peut-être ajouter un deuxième "shadow". service Web entre vos clients et le service Web original. Le service Web fantôme pourrait interroger le service Web d'origine, puis cliquer sur "Push". tout ce qu'il découvre aux PDA.

Je pense que vous pourriez toujours avoir le même problème, cependant. Je n'ai jamais fait "push". depuis un service Web, mais je pense que cela est essentiellement mis en œuvre en demandant au client de faire un appel initial à une méthode de service Web qui entraîne un délégué vers une méthode dans le client, à laquelle le service Web se bloque ensuite. Lorsque le service Web doit pousser quelque chose, il appelle ce délégué. Si le client est passé en mode veille entre-temps, la tentative d'appel du délégué à partir du serveur échouera.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top