Timer évenements

[Résolu]
Signaler
Messages postés
16
Date d'inscription
lundi 14 novembre 2005
Statut
Membre
Dernière intervention
4 août 2006
-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
Bonjour j'ai un piti problème, dans mon projet, j'utilise une classe afin d'utiliser un timer pour chaque objet . La voici:
using

System;

using System.Windows.Forms;

public
class MaClasse
{

Timer MonTimer;

public MaClasse(
)
{

this.MonTimer=
new Timer();

this.MonTimer.Tick +=
new System.EventHandler(
this.MonTimer_Tick);
}

public
void Lancer()
{
MonTimer.Interval= Frequence;
MonTimer.Start();
}

private
void MonTimer_Tick(
object sender, System.EventArgs e)
{
MessageBox.Show("toto");
}

Le problème est que lorsque j'utilise ma méthode lancer, rien ne se passe, est ce un problème avec mon évenement?

Merci d'avance

8 réponses

Messages postés
221
Date d'inscription
mardi 12 août 2003
Statut
Membre
Dernière intervention
11 décembre 2008
1
Ton prblème est simple :


ta méthode MaMethode() instancie des classes (sur ton thread) et se termine => tes objets sont détruient....

il te faut une MaMethode() "bloquante" pour que les objets ne soit pas détruit.

Chaque problème a sa solution. S'il n'y a pas de solution c'est qu'il n'y a pas de problème.
a+
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
58
Ca devrait marcher.
Petites questions : Que vaut la variable frequence et ou appelles-tu la méthode lancer?

<hr size="2" />VC# forever
Messages postés
16
Date d'inscription
lundi 14 novembre 2005
Statut
Membre
Dernière intervention
4 août 2006

j'ai verifier, la variable frequence vaut bien 3000 et ca ne marche toujours pas...

public class MaClasse
{
Timer MonTimer;
int Frequence;













public MaClasse(int F)
{
this.Frequence= F
this.MonTimer=new Timer();
this.MonTimer.Tick += new System.EventHandler(this.MonTimer_Tick);
}
........
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
58
Où et comment appelles-tu la méthode lancer ?

<hr size="2" />VC# forever
Messages postés
16
Date d'inscription
lundi 14 novembre 2005
Statut
Membre
Dernière intervention
4 août 2006

private






void
Form1_Load(

object
sender, System.EventArgs e)
{


try

{


T1=

new
Thread(

new
ThreadStart(MaMethode));
T1.Start();
}


catch

{}
}


public



void
MaMethode()
{


for
(

int
i=0;i<lstObjets.Count;i++)
{
MaClasse Temp = (MaClasse) lstObjets[i];
Temp .Lancer();
}
}

Mais je suis sur que ma methode "Lancer" fonctionne, je lui ai mis un messageBox pour verifier....
Messages postés
16
Date d'inscription
lundi 14 novembre 2005
Statut
Membre
Dernière intervention
4 août 2006

Ca yest ca marche, mais quand je ne fais pas de thread.

MaMethode()

au lieu de

T1= new
Thread(
newThreadStart(MaMethode));
T1.Start();

je vois pas pourquoi..
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
58
Oui...
Si t'es débutant en programmation, tu t'aventures sur un terrain un peu difficile en commençant avec les threads...

<hr size="2" />VC# forever <
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
54
Salut

Pour que cela fonctionne, dans un environnement Multi Thread, utilises le Timer de l'espace de nom System.Timers, (si tu veux garder a peu pres la meme syntaxe).
Autrement, tu peux aussi utiliser le Timer de l'espace de nom System.Threading.

Mx
MVP C#