Problème arrêt thread c#

Passboss87 Messages postés 11 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 27 février 2010 - 9 oct. 2007 à 00:36
Passboss87 Messages postés 11 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 27 février 2010 - 12 oct. 2007 à 14:05
Bonjour, je suis débutant en visual studio 2005.
J'ai voulu créer un chat serveur/client et tout marche quasiment.
Et j'arrive enfin au moment où je dois tester si un client est toujours connecté, j'ai du lire des tonnes et des tonnes de pages sur internet.
Je réalise donc ceci ( oui il est simple lol je ne suis qu'un petit nouveau ) :
        private void lect_mess()
        {
                Byte[] buffer = new Byte[1024];
                String data = null;

                Socket MySocket = (Socket)liste[liste.Count - 1];

                    while (Thread.CurrentThread.IsAlive)
                    {
                         if (MySocket.Connected)
                         {
                             if (MySocket.Poll(10, SelectMode.SelectRead) && MySocket.Available == 0)
                             {
                                 Thread.CurrentThread.Abort();
                             }
                             else
                             {
                                 MySocket.Receive(buffer);
                                 data = null;
                                 data = Encoding.ASCII.GetString(buffer);
                                 listBox1.Items.Add("Client" + i + " : " + data);
                             }
                         }
                    }
        }
Lorsque je déconnecte un client du serveur , mon serveur reçoit un dernier message et j'obtiens aussi un message d'erreur du style "débogage, envoyer le rapport d'erreurs ou ne pas envoyer" puis l'application se ferme.
Je lis ce rapport d'erreur qui est :
EventType : clr20r3     P1 : serveur.exe     P2 : 1.0.2837.42190    
P3 : 470b2d1c     P4 : mscorlib     P5 : 2.0.0.0     P6 : 461eee3d     P7 : 154b
P8 : 21     P9 : system.argumentoutofrange 
et je n'y comprends rien, pouvez vous m'aider s'il vous plait? Je pense que l'erreur vient du Thread.CurrentThread.Abort(); mais je n'arrive vraiment pas à résoudre ce problème, je n'en peux plus ! Merci d'avance pour les réponses.

5 réponses

Passboss87 Messages postés 11 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 27 février 2010
9 oct. 2007 à 19:05
Personne ne peut m'aider ? s'il vous plaît ..
0
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
10 oct. 2007 à 13:10
Mets ton code dans un bloc try/catch ou utilise le debugger pour regarder quelle exception est levée : cela te fournira la cause précise du problème (et donc sa solution ;)

<hr size="2" width="100%" />
Working as designed
www.nikoui.fr
0
Passboss87 Messages postés 11 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 27 février 2010
10 oct. 2007 à 21:21
Si j'ai bien compris ce que tu as dit, j'ai mis un bloc try\catch comme suit :

        private void lect_mess()
        {
                Byte[] buffer = new Byte[1024];
                String data = null;
                Socket MySocket = (Socket)liste[liste.Count - 1];

                    while (Thread.CurrentThread.IsAlive)
                    {
                       try
                         {
                             if (MySocket.Poll(10, SelectMode.SelectRead) && MySocket.Available == 0)
                             {
                                 Thread.CurrentThread.Abort();
                                 Thread.Sleep(0);
                             }
                             else
                             {
                                ...
                             }
                         }
                       catch ( Exception e )
                        {
                            Console.WriteLine("{0} Exception caught.", e);
                        }            
                    }
        }
Quand je le compile je n'ai aucune erreur, mais maintenant que dois-je faire ? désolé je ne comprends pas encore tres bien ce langage malgré ce que j'ai pu lire.
0
bidou_01 Messages postés 134 Date d'inscription dimanche 1 octobre 2006 Statut Membre Dernière intervention 19 mai 2008 1
11 oct. 2007 à 20:43
Bonsoir,

L'appel de la méthode Abort() sur le thread courant (CurrentThread) va tenter d'arrêter le thread courant, le Thread.Sleep(0); ne sert pas à grand chose derrière. Mais là, il est normal que ton application s'arrête car tu demandes l'arrêt du Thread Principal. Logiquement, au moment ou ta condition  if (MySocket.Poll(10, SelectMode.SelectRead) && MySocket.Available == 0) est validée, tu dois avoir une ligne dans la console correspondant à cette instruction  Console.WriteLine("{0} Exception caught.", e); et ton appli doit se fermer.

Cordialement,
0

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

Posez votre question
Passboss87 Messages postés 11 Date d'inscription jeudi 27 septembre 2007 Statut Membre Dernière intervention 27 février 2010
12 oct. 2007 à 14:05
Merci pour la réponse,
.. il y a une question que je me pose, quelle est la différence entre exécuter l'exécutable dans le dossier bin\debug et l'exécuter a l'aide du debug dans le visual studio 2005? car quand j'exécute l'exécutable il fonctionne, mais bug au bout de plusieurs connexions/déconnexions du client tandis que quand j'utilise le debug, je n'arrive carrément pas a les connecter donc je ne peux pas voir la ligne dans la console comme tu me le dis.
0
Rejoignez-nous