Pourquoi mon timer ne s'execute pas ????

Résolu
lpupi Messages postés 23 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 11 mai 2012 - 21 févr. 2012 à 16:07
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 - 24 févr. 2012 à 16:12
Une personne pourrait m'aider à comprendre pourquoi mon Timer ne se lance pas ?

Il est appelé par l'event Authentication_LoggedIn. Est-ce la cause ? dans ce cas comment executer Timer en étant sûr que la personne soit loggée ??

Merci d'avance pour votre aide.



private void Authentication_LoggedIn(object sender, AuthenticationEventArgs e)
{

if (WebContext.Current.User.IsAuthenticated)
{
Event.Visibility = Visibility.Visible;
Event.Children[1].Visibility = System.Windows.Visibility.Collapsed;
Event.Children[1].Visibility = System.Windows.Visibility.Visible;
tabMain2.Visibility = Visibility.Visible;
tabMain3.Visibility = Visibility.Visible;
tabMain4.Visibility = Visibility.Visible;
tabMain5.Visibility = Visibility.Visible;
tabMain6.Visibility = Visibility.Visible;
tabMain4.IsSelected = true;
login = WebContext.Current.User.Name;
PseudoEventContext EventContext = new PseudoEventContext();
Global.duplex.ReceptReceived += new EventHandler<ReceptReceivedEventArgs>(duplex_ReceptReceived);
Global.duplex.EnvoiAsync(1, login, null, null, 0);
timer = new System.Threading.Timer(MStayAlive, null, 0, 3000);
NbConnexions.Visibility = Visibility.Visible;
}
}

public void MStayAlive(object Null)
{
MessageBox.Show("J'envoi 1");
Global.duplex.EnvoiAsync(1, WebContext.Current.User.Name, null, null, 0);
}


Un débutant

13 réponses

lpupi Messages postés 23 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 11 mai 2012
24 févr. 2012 à 16:02
J'ai changé de Timer (System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();)

Et là ça marche !

ça n'explique pas pourquoi l'autre ne marchait pas chez moi mais bon ... je suis au moins débloqué !

Merci Whismeril pour le temps que tu as passé là dessus.

Un débutant
3
lpupi Messages postés 23 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 11 mai 2012
22 févr. 2012 à 09:43
PLEEEEEEEEEEAAAAAAAAAAAAAAAAAAAAAAAAASE HEEEEEEEEEEEEEEEEEEEELP !

Un débutant
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
22 févr. 2012 à 10:29
Bonjour

quand tu postes un code utilise les balises de code, 3eme icône en partant de la droite au-dessus de la zone de saisie du texte.

Ca donne ça:


private void Authentication_LoggedIn(object sender, AuthenticationEventArgs e) 
{ 

if (WebContext.Current.User.IsAuthenticated) 
{ 
Event.Visibility = Visibility.Visible; 
Event.Children[1].Visibility = System.Windows.Visibility.Collapsed; 
Event.Children[1].Visibility = System.Windows.Visibility.Visible; 
tabMain2.Visibility = Visibility.Visible; 
tabMain3.Visibility = Visibility.Visible; 
tabMain4.Visibility = Visibility.Visible; 
tabMain5.Visibility = Visibility.Visible; 
tabMain6.Visibility = Visibility.Visible; 
tabMain4.IsSelected = true; 
login = WebContext.Current.User.Name; 
PseudoEventContext EventContext = new PseudoEventContext(); 
Global.duplex.ReceptReceived += new EventHandler<ReceptReceivedEventArgs>(duplex_ReceptReceived); 
Global.duplex.EnvoiAsync(1, login, null, null, 0); 
timer = new System.Threading.Timer(MStayAlive, null, 0, 3000); 
NbConnexions.Visibility = Visibility.Visible; 
} 
} 

public void MStayAlive(object Null) 
{ 
MessageBox.Show("J'envoi 1"); 
Global.duplex.EnvoiAsync(1, WebContext.Current.User.Name, null, null, 0); 
}


Comme tu ne précises pas d'ou vient ton événement, la seule chose que je peux te conseiller est de mettre un point d'arrêt dès le début de la procédure et de voir comment ça se comporte. Il est possible, par exemple, qu'à l'appel de cet événement
if (WebContext.Current.User.IsAuthenticated) 
soit faux.


Whismeril
0
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
22 févr. 2012 à 11:19
Salut, il semblerait que tu crée bien un timer :

timer = new System.Threading.Timer(MStayAlive, null, 0, 3000); 


Mais à aucun moment le timer ne démarre. Il faudrait que tu rajoutes cette ligne juste après l'instantiation du timer :

timer.Start();
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
22 févr. 2012 à 11:27
C'était ma première idée, mais chez moi dans un bouton ça fonctionne.
Il n'y a pas de .Start() pour ce type de timer.

Par contre je suppose qu'il est déclaré ailleurs dans le projet, pour ma part j'ai déclaré et instancié sur une ligne

            System.Threading.Timer t = new System.Threading.Timer(MStayAlive, null, 0, 1000);




Whismeril
0
lpupi Messages postés 23 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 11 mai 2012
22 févr. 2012 à 13:54
Merci pour vos réponse. J'ai cependant un petit PB : il refuse la commande timer.Start(); (N'existe pas ...)

Un débutant
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
22 févr. 2012 à 14:41
C'est pour ça que j'ai écrit
Il n'y a pas de .Start() pour ce type de timer.


As tu mis un point d'arrêt au début de ta procédure?
Whismeril
0
lpupi Messages postés 23 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 11 mai 2012
22 févr. 2012 à 16:07
Oui je passe bien dans le bloc de mon if

En effet timer est déclaré comme variable dans ma classe MainPage.

Un débutant
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
22 févr. 2012 à 16:19
As tu exécuté en mode pas à pas pour voir si tu vas bien jusqu'à la ligne d'initialisation du timer? Et si elle semble au moins s'exécuter?
Si tu as une gestion d'erreurs, il est possible qu'une ligne avant ou celle-ci crée une exception interceptée par ta gestion d'erreurs.

Une autre hypothèse, la portée de la déclaration du timer englobe-t-elle ton événement?


Whismeril
0
lpupi Messages postés 23 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 11 mai 2012
22 févr. 2012 à 18:53
heu ... là ça commence à se compliquer ... depuis que j'ai mis en place "ma machine de prod", je n'ai plus accès au debugger (A chaque point d'arrêt j'ai : le point d'arrêt ne sera pas atteint pour l'instant. aucun symbole n'a été chargé pour ce document) J'ai dû merder quelque part mais je ne sais pas où

Côté porté de la variable, oui, le timer est déclaré au niveau de la classe. J'ai même essayé de l'initialiser dans le constructeur ....

Question : (Histoire d'être sûr) mon MStayAlive est une simple méthode (Ce qui est mon cas)? Il n'ay a pas à déclarer de délégué ou autres ?

Désolé pour les questions débiles mais je suis un ....

Un débutant ... et à force de cherche j'arrive souvent à me perdre !

En tout cas, merci pour le temps que tu me consacre.
0
lpupi Messages postés 23 Date d'inscription jeudi 31 mars 2011 Statut Membre Dernière intervention 11 mai 2012
22 févr. 2012 à 19:03
Petite précision (Je ne sais pas si ça a une importance) C'est un projet Silverlight et ça se passe côté client.

Un débutant
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
22 févr. 2012 à 22:21
Ca a probablement de l'importance, car chez moi en winform ton code fonctionne.
Et c'est là aussi ou je vais peut être ne plus pouvoir t'aider, je n'ai jamais fait de sylverlight, ni d'application client serveur.

Pour la déclaration de Stayalive, le cache de la fonction te demande un "System.Threading.TimerCallback" qui semble-t-il est un délégué.
Ceci fonctionne aussi chez moi, et cette fois il y'a le délégué:
            System.Threading.TimerCallback tcb = MStayAlive;
            System.Threading.Timer montTimer = new System.Threading.Timer(tcb, null, 0, 1000);



Whismeril
0
Whismeril Messages postés 19028 Date d'inscription mardi 11 mars 2003 Statut Non membre Dernière intervention 24 avril 2024 656
24 févr. 2012 à 16:12
De rien, au final je n'ai pas pu t'aider....


Whismeril
0
Rejoignez-nous