Problème de Timer [Résolu]

urban45 19 Messages postés samedi 9 juin 2007Date d'inscription 29 novembre 2009 Dernière intervention - 18 déc. 2008 à 00:23 - Dernière réponse : urban45 19 Messages postés samedi 9 juin 2007Date d'inscription 29 novembre 2009 Dernière intervention
- 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
SharpMao 1025 Messages postés mardi 4 février 2003Date d'inscription 7 juin 2010 Dernière intervention - 23 déc. 2008 à 13:27
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)

Merci SharpMao 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de SharpMao
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 18 déc. 2008 à 09:30
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 18 déc. 2008 à 09:40
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
urban45 19 Messages postés samedi 9 juin 2007Date d'inscription 29 novembre 2009 Dernière intervention - 18 déc. 2008 à 14:52
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 19 déc. 2008 à 12:24
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
urban45 19 Messages postés samedi 9 juin 2007Date d'inscription 29 novembre 2009 Dernière intervention - 19 déc. 2008 à 16:52
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
cs_Bidou 5507 Messages postés dimanche 4 août 2002Date d'inscription 20 juin 2013 Dernière intervention - 19 déc. 2008 à 19:32
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
urban45 19 Messages postés samedi 9 juin 2007Date d'inscription 29 novembre 2009 Dernière intervention - 22 déc. 2008 à 12:48
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
urban45 19 Messages postés samedi 9 juin 2007Date d'inscription 29 novembre 2009 Dernière intervention - 23 déc. 2008 à 16:40
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.