Problème de Timer [Résolu]

Messages postés
19
Date d'inscription
samedi 9 juin 2007
Dernière intervention
29 novembre 2009
- - Dernière réponse : urban45
Messages postés
19
Date d'inscription
samedi 9 juin 2007
Dernière intervention
29 novembre 2009
- 23 déc. 2008 à 16:40
Bonsoir,

Voici mon code:

timer1.Interval = 1000;

timer1.Start();

timer1.Tick +=

new
EventHandler(timer1_Tick);

private
void timer1_Tick(
object sender,
EventArgs e){

Console.WriteLine(
"OK");

timer1.Stop();

timer2.Interval = 1000;

timer2.Start();

timer2.Tick +=

new
EventHandler(timer2_Tick);}

private
void timer2_Tick(
object sender,
EventArgs e){
 // etc...
}

Je ne suis pas sur d'avoir compris le fonctionnement des Timer, je ne comprend pas pourquoi dans ma Console, "OK" est affiché 2 fois !! Pour moi il devrait s'exécuter une fois aprés la fin de temps (1 seconde).

Merci d'avance de m'éclairer, j'ai en vraiment besoin.
Afficher la suite 

Votre réponse

9 réponses

Meilleure réponse
Messages postés
1025
Date d'inscription
mardi 4 février 2003
Dernière intervention
7 juin 2010
3
Merci
Hello,

A mon avis, ton timer doit déjà avoir l'eventHandler timer1_tick.
Le fait de faire timer1.Tick +=
newEventHandler(timer1_Tick);

le rajoute une deuxième fois, et timer1_tick est donc appelé deux fois à la fin du timer.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 98 internautes ce mois-ci

Commenter la réponse de SharpMao
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
0
Merci
Salut,
Il s'affiche une fois pour le timer1 et une fois pour le timer2.
Le timer ne s'exécute qu'une seule fois.

<hr />
-Blog-
-Site Perso-
Commenter la réponse de cs_Bidou
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
0
Merci
Ha et si tu veux faire une opération en boucle, il faut plutôt regarder du côté de System.Threading.Timer...
http://msdn.microsoft.com/fr-fr/library/system.threading.timer(VS.80).aspx

<hr />
-Blog-
-Site Perso-
Commenter la réponse de cs_Bidou
Messages postés
19
Date d'inscription
samedi 9 juin 2007
Dernière intervention
29 novembre 2009
0
Merci
Bonjour et merci,

Ben non car je fais Console.WriteLine("OK"
); seulement dans timer1_Tick, donc normalement il doit bien s'afficher qu'une fois "OK" ??
Je veux pas faire d'opération en boucle, mon problème est justement qu'il passe 2 fois !!



J'y comprend rien !! Merci de m'éclairer... Car ça me pose problème dans l'avancement de mon projet !!



Merci d'avance
Commenter la réponse de urban45
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
0
Merci
Hum, tu peux donner un bout de code qui reproduit le problème?

<hr />
-Blog-
-Site Perso-
Commenter la réponse de cs_Bidou
Messages postés
19
Date d'inscription
samedi 9 juin 2007
Dernière intervention
29 novembre 2009
0
Merci
C'est exactement comme le code mis au dessus, voici le code vraiement complet:

private
void Form1_Shown(
object sender,
EventArgs e){

timer1.Interval = 1000;

timer1.Tick +=

new
EventHandler(timer1_Tick);timer1.Start();

}

private
void timer1_Tick(
object sender,
EventArgs e){

Console.WriteLine(
"OK");timer1.Stop();
timer2.Enabled true;timer2.Interval 1000;

timer2.Tick +=

new
EventHandler(timer2_Tick);}

private
void timer2_Tick(
object sender,
EventArgs e){
timer2.Stop();
}

Dans la console, ça 'affiche "OK" deux fois, par quel miracle ?

Ce problème me prend vraiment la tête car ça me géne pour ce que je veux faire...

Je ne vois pas la logique dans les Timer... Je ne sais pas pourquoi cela passe
 fois dedans !!

Merci d'avance
Commenter la réponse de urban45
Messages postés
5507
Date d'inscription
dimanche 4 août 2002
Dernière intervention
20 juin 2013
0
Merci
Je viens de tester, chez moi ça marche.
Tu dois probablement avoir une partie de programme qui fait le print.

Créer un nouveau projet et ne met que le code ci-dessus dedans. Si ça marche correctement, alors c'est effectivement un problème qui vient d'ailleurs. Si ça marche pas euh.... on avisera

<hr />
-Blog-
-Site Perso-
Commenter la réponse de cs_Bidou
Messages postés
19
Date d'inscription
samedi 9 juin 2007
Dernière intervention
29 novembre 2009
0
Merci
Salut,

J'ai refait un nouveau projet et voici le code (toujours pareil...) :





private





int

n = 0;



private





void

Form1_Load(


object

sender,


EventArgs

e){

timer1.Interval = 5000;

timer1.Enabled =



true

;timer1.Tick +=



new





EventHandler

(timer1_Tick);}



private





void

timer1_Tick(


object

sender,


EventArgs

e){



Console

.WriteLine(


"OK"

+ n);n = 12;

timer1.Stop();

timer2.Interval = 5000;

timer2.Enabled =



true

;timer2.Tick +=



new





EventHandler

(timer2_Tick);}



private





void

timer2_Tick(


object

sender,


EventArgs

e){

timer2.Stop();

}

Une nouvelle fois, ça passe deux fois dedans !
A l'affichage:

OK0

OK12

Comment est-ce possible ?

Merci d'avance
Commenter la réponse de urban45
Messages postés
19
Date d'inscription
samedi 9 juin 2007
Dernière intervention
29 novembre 2009
0
Merci
Merci beaucoup !!


Je ne sais pas pourquoi je n'y avais pas pensé !!


Je veux bien que tu regardes si tu as le temps une autre question que j'ai posté dans Windows/Process/.
http://www.csharpfr.com/forum/sujet-PROBLEME-POSITIONNER-PROCESS-INTERIEUR-FENETRE_1241947.aspx

Sinon encore merci !!
Commenter la réponse de urban45

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.