Afficher un rappel selon une heure precise [Résolu]

sandra26 92 Messages postés mercredi 5 juillet 2006Date d'inscription 5 août 2009 Dernière intervention - 12 oct. 2006 à 15:37 - Dernière réponse : SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention
- 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?

sandra
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 12 oct. 2006 à 15:52
3
Merci
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.

Mx
MVP C# 

Merci MorpionMx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de MorpionMx
Meilleure réponse
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 12 oct. 2006 à 16:00
3
Merci
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.

Amicalement, SharpMao

Merci SharpMao 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de SharpMao
Meilleure réponse
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 13 oct. 2006 à 08:16
3
Merci
Pas besoin de convertir :

Si tu soustrait deux DateTime, tu obtiens un TimeSpan, qui possède la propriété TotalMilliseconds

Ex pour afficher le nombre de millisecondes depuis minuit :

DateTime

Now = DateTime
.Now;
DateTime Noon = DateTime
.Today;
TimeSpan
dif = Now - Noon;
MessageBox.Show(dif.TotalMilliseconds.ToString());

Amicalement, SharpMao

Merci SharpMao 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de SharpMao
Meilleure réponse
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 13 oct. 2006 à 08:40
3
Merci
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

//...

private
void Elapsed(
object state)
{
   timer.Change(
Timeout.Infinite,
Timeout.Infinite); // desactivation du timer

   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# 

Merci MorpionMx 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de MorpionMx
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 12 oct. 2006 à 16:01
0
Merci
Arf, eu par le refresh !

Amicalement, SharpMao
Commenter la réponse de SharpMao
Lutinore 3248 Messages postés lundi 25 avril 2005Date d'inscription 27 octobre 2012 Dernière intervention - 12 oct. 2006 à 16:04
0
Merci
C'est vrai que c'est pas simple.. je sais pas trop.. peut être on peut se servir de l'API "Task Sheduler" de Windows mais je ne l'ai jamais utilisé.

Il existe un wrapper .NET sur CodeProject

http://www.codeproject.com/cs/library/taskschedulerlibrary.asp
Commenter la réponse de Lutinore
sandra26 92 Messages postés mercredi 5 juillet 2006Date d'inscription 5 août 2009 Dernière intervention - 12 oct. 2006 à 20:06
0
Merci
pas mal merci de vos reponses cest tout bete mais je ny avais pas pense
Merci pour toutes vos reponses
Je suis sure d'y trouver mon bonheur,

sandra
Commenter la réponse de sandra26
sandra26 92 Messages postés mercredi 5 juillet 2006Date d'inscription 5 août 2009 Dernière intervention - 13 oct. 2006 à 00:23
0
Merci
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?

Merci encore

sandra
Commenter la réponse de sandra26
MorpionMx 3489 Messages postés lundi 16 octobre 2000Date d'inscription 30 octobre 2008 Dernière intervention - 13 oct. 2006 à 08:42
0
Merci
Ne jamais partir faitre autre chose pendant qu'on tape une réponse, apres on se prend presque 30 minutes dans la vue  ^^

Mx
MVP C# 
Commenter la réponse de MorpionMx
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 13 oct. 2006 à 10:54
0
Merci
C'est cu qui m'était arrivé lors de ma première réponse à ce post :-)

Amicalement, SharpMao
Commenter la réponse de SharpMao

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.