sandra26
Messages postés92Date d'inscriptionmercredi 5 juillet 2006StatutMembreDernière intervention 5 août 2009
-
12 oct. 2006 à 15:37
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 2010
-
13 oct. 2006 à 10:54
Salut,
en fait j'explique la situation, j'ai une liste de rappels que je garde dans ma bdd Access, dans ce tableau j'ai aussi les heures auxquelles je dois afficher ces rappels.
Prenons l'exemple d'un rappel X qui dois s'afficher a 11h00, je voudrais donc quune petite fenetre apparaisse et contienne toutes les donnes concernant ce rappel.
Pour la petite fenetre ca nest pas un pb mais par contre je ne sais pas trop comment faire pour que mon programme reconnaisse lheure tout seul
jai bien pense a utiliser un timer afin de verifier toutes les minutes mais je trouve ca tres lourd.
Est-ce que vous auriez une solution plus propre a me proposer?
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 12 oct. 2006 à 15:52
Salut,
Une solution toute bête si tu n'as pas envie de vérifier toutes les X minutes, c'est de regarder dans ta table quelle est l'alerte la plus proche dans le temps.
Ensuite, tu prends la différence de temps entre la date actuelle du système et la date de ta prochaine alerte.
Et finalement, tu instancies un timer qui se déclenche apres que cette différence de temps soit passée.
Une fois le timer déclenché, tu affiches ton message, et tu modifies ton timer pour la prochaine alerte.
SharpMao
Messages postés1024Date d'inscriptionmardi 4 février 2003StatutMembreDernière intervention 7 juin 201069 12 oct. 2006 à 16:00
Hello,
Tu peux regarder dans ta base de données le prochain rappel à afficher, et mettre un timer qui se réveillera à ce moment.
Au moment du réveil du Timer, tu affiches l'événement en question, et tu va chercher le suivant.
Attention tout de même. Avec ce système, si tu rajoutes des rappels, il ne les verra que lorsque le timer arrive au bout, il se peut donc que tu doives aller tout de même vérifier si de nouveaux éléments ont été rajoutés. De plus, si les événements sont très éloignés (>24h), le timer peut ne pas bien gérer ces long délais.
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 13 oct. 2006 à 08:40
Salut,
Il te suffit de recuperer ta date, de la convertir en DateTime, et d'y soustraire la date actuelle (via DateTime.Now)
Ensuite, tu déclares une instance de la classe System.Threading.Timer
<hr />
DateTime dt;
DateTime.TryParse(
"taDate",
out dt); // Conversion de ta date
TimeSpan ts = dt.Subtract(
DateTime.Now); // Tu obtiens la différence
this.timer =
new System.Threading.
Timer(
new
TimerCallback(Elapsed));
this.timer.Change(ts, new
TimeSpan(-1)); // Tu initialises le Timer. new TimeSpan(-1) indique qu'un fois déclenché, l'evenement ne se repete pas
MessageBox.Show(
"alerte");
// ici tu met ton code pour affecter un nouvel interval au timer (rappel de la méthode Change)
}
<hr />
Autrement, si tu tiens a obtenir un interval de temps en secondes (ou en millisecondes), regardes les propriétés de ton TimeSpan, tu y trouveras ton bonheur ;)
J'ai utilisé la classe System.Threading.Timer parce qu'il peut avoir de grosses valeurs en interval. Cependant, a toi de voir si ce n'est pas mieux pour toi d'utiliser la classe System.Timers.TimerMx
MVP C#
Vous n’avez pas trouvé la réponse que vous recherchez ?
sandra26
Messages postés92Date d'inscriptionmercredi 5 juillet 2006StatutMembreDernière intervention 5 août 2009 13 oct. 2006 à 00:23
J'ai encore une petite et derniere question:
Comment est-ce que je fais pour obtenir un interval de temps en secondes.
Jai bien pense a convertir les 2 dates toOADate() et puis les soustraire, mais ensuite comment je fais pour obtenir des secondes?