J'essaie de trouver un moyen de déclencher un événement Silverlight pour se produire à une heure précise de la journée. L'application sera manquée de navigateur et sera exécutée tout le temps. J'ai trouvé des méthodes qui utilisent une minuterie pour déclencher un événement chaque minute, puis vérifiez si c'est le bon moment de faire quelque chose, mais cela semble désordonné. Existe-t-il un moyen de tirer un événement à, par exemple, 10h34 le 23 septembre 2010? P>
4 Réponses :
Je ne crois pas qu'il existe une telle caractéristique de Silverlight. Si vous n'aimez pas l'approche de vote, vous pouvez toujours avoir la différence entre DateTime.Now et l'heure cible et définir une minuterie pendant cette longue. Bien que je ne sache pas à quel point cela serait fiable. P>
Un TIMER CODE> est l'outil pour le travail, je ne vois aucune raison de ne pas être moins fiable que toute autre approche. Cette réponse serait grandement améliorée avec un exemple de code simple.
Les minuteries sont destinées à des intervalles courts, donc je ne sais pas si cela sera précis. Voir mon post.
Je ne suis au courant d'aucun contrôle qui fait ce que vous demandez. Voici les minuteries que je connais avec: p>
Je pense que votre meilleur pari est d'utiliser un intervalle d'intervalle de 30 secondes, puis de correspondre à la date et à la date attendue. à partir de ce que je me souviens que de telles minuteries sont destinées à de petits intervalles, des intervalles aussi gros seront moins précis. (Je parle sous la correction) Strike> p>
edit fort>: MSDN Remarques sur le chronométrage : "Les minuteries ne sont pas garanties d'exécuter exactement lorsque l'intervalle de temps survient, mais ils sont garantis de ne pas exécuter avant l'intervalle de temps. C'est parce que Disternmertimer Les opérations sont placées sur le Dispatcher file d'attente comme d'autres opérations. Lorsque l'opération DISPATCHERTIMER exécute dépend des autres travaux de la file d'attente et de leurs priorités. " p>
Vous avez mentionné la précision des longs intervalles. Sûrement, le meilleur cas est d'attendre un long intervalle d'abord (un peu plus court que le temps requis, c'est-à-dire une erreur la plus grande erreur connue), puis commencez à interroger à un intervalle plus petit jusqu'à ce que l'heure soit atteinte?
@Enough déjà: Bien sûr, vous pourriez le faire. Tout dépend du temps que vous souhaitez investir dans la construction d'une solution. Une tique toutes les 30 secondes ne tuera pas votre CPU.
J'ai couru quelques tests et Disternmertimer est assez précis lorsque cela ne se passe pas beaucoup d'autre. Pas besoin d'interrogation après tout.
Merci pour les réponses. Je n'ai toujours rien trouvé, mais vous avez fini par utiliser un storyboard comme composant de chronométrage, lorsque Distertertimer fonctionne dans le même fil que l'interface utilisateur, tandis que le storyboard n'agit pas. P>
Vous pouvez en savoir plus sur une comparaison entre les deux ici. P>
http://blogs.silverlight.net/ Blogs / MSNOW / Archive / 2009/11/09/69731.ASPX P>
Il n'y a aucune raison que vous devriez vous soucier que la minuterie fonctionne sur le fil de l'interface utilisateur, car vous n'avez pas besoin de haute résolution ou de cohérence. Un storyboard peut avoir besoin de courir tous les 10 ms, qu'un Dispattretertimer ne peut pas faire. Mais vous avez besoin d'une résolution d'une minute ou d'une seconde, pas de millisecondes, de sorte que cela devrait être sans importance pour vous.
Si vous souhaitez que la minuterie puisse survivre, redémarrez, je suggère d'utiliser des tâches planifiées et persistez quelque part. P>
Sinon, il suffit de définir un intervalle de minuterie sur Timespan entre l'heure actuelle et planifiée. P>