Méthodes appelées par des threads

Résolu
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008 - 3 août 2007 à 11:24
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 - 6 août 2007 à 19:07
Bonjour,

J'ai adapté la source Client-Serveur de LumesH (Merci à Yxion pour son aide) puis j'y ai ajouté un bouton "start/stop" côté serveur. Problème : Quand je redémarre le serveur après un arrêt, les méthodes appelées par le thread "StartServeur" et tous ses "threads enfants" sont exécutées une fois de plus, comme si chaque fois que je redémarre un thread venait s'ajouter et tournerait en parrallèle des autres. Pourtant je supprime le thread "StartServeur" à chaque arrêt du serveur.

Voici comment est créé le thread "StartServeur" :

public void Start()
{
InstanceServeurThread = new Thread(new ThreadStart(StartServeur));
InstanceServeurThread.Name = "InstanceServeurThread_" + _UniqueID;
InstanceServeurThread.Priority = ThreadPriority.Normal;
InstanceServeurThread.Start();
}

J'ai essayé plusieurs façon d'arrêter le thread dans la méthode "Stop", d'ailleurs il doit bien être supprimé puisqu'aucun client ne peut se connecter quand il est arrêté. Le seul moyen d'éviter ce problème c'est de redémarrer carrément l'appli.

Est-ce que quelqu'un a déjà rencontré ce problème dans l'utilisation des threads?

7 réponses

churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008
6 août 2007 à 16:08
Bon ben j'ai mis le temps mais j'ai fini par comprendre mon erreur en préparant l'exemple que je voulais mettre à disposition. En retirant chaque élément inutile pour l'exemple en question je me suis retrouvé avec quasiment rien et là, bingo, vu ma connerie!! ...qui m'a faite perdre des heures de concentration et quelques précieux neurones. Explications :

Le traitement du "start/stop" inclu en autres choses la prise en charge de l'évènement déclenché par le Thread et appelant ma méthode :

"InstanceClasseServeur.ConnectionStateEvent += new ConnectionStateHandler(ConnectionState);"

Donc à chaque fois que je redémarre en cliquant sur ce bouton une nouvelle prise en charge (supplémentaire) de l'évènement est créée, c'est pourquoi à chaque fois que l'évènement se produit l'appel de la méthode est effectué autant de fois que j'ai créé la prise en charge de l'évènement, c'est à dire autant de fois que j'ai cliqué sur le bouton "start/stop".

Les joies du débutant autodidacte, j'espère que ça pourra servir à d'autres.
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
3 août 2007 à 14:29
t'as essayé InstanceServeurThread.Abort() ?

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008
3 août 2007 à 20:22
oui, mais ça change rien, j'ai l'impression qu'il reste toujours une instance en mémoire. Il faudrait effectuer une "purge complète" équivalent au redémarrage de l'appli, mais j'sais pas comment faire.
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
4 août 2007 à 01:17
Salut,

Tu fais quoi dans la méthode StartServeur ? (en particulier au niveau de la gestion d'exceptions)

/*
coq
MVP Visual C#
CoqBlog
*/
0

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

Posez votre question
churrros Messages postés 19 Date d'inscription mardi 26 juin 2007 Statut Membre Dernière intervention 9 avril 2008
4 août 2007 à 19:57
J'ai viré tout ce que je faisais dans la méthode sauf la création d'une instance socket avec une simple exception. Les appels aux méthodes de la form utilisant la classe qui démarre mes theads sont effectués par des invokes.
Je mettrais à dispo la semaine prochaine un exemple rapide reproduisant ce problème afin que vous ayez quelquechose de concret à tester.
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
6 août 2007 à 16:16
c'est balo !

Sébastien FERRAND (blog)
Consultant Indépendant
[Microsoft Visual C# MVP]
0
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
6 août 2007 à 19:07
C'est pour ça qu'il faut prendre l'habitude se désabonner de l'event dès lors que l'on en a plus besoin :-)

/*
coq
MVP Visual C#
CoqBlog
*/
0
Rejoignez-nous