[C#] Problème de Thread

leodrel56 Messages postés 6 Date d'inscription jeudi 11 août 2005 Statut Membre Dernière intervention 20 mai 2008 - 19 mai 2008 à 01:15
leodrel56 Messages postés 6 Date d'inscription jeudi 11 août 2005 Statut Membre Dernière intervention 20 mai 2008 - 20 mai 2008 à 17:39
Bonsoir à tous !!!

Voilà je me suis mis au C# ce matin et je rencontre quelques petits soucis, voilà premièrement dans mon pseudo programme j'initialise un thread que je peux suspendre et reprendre mais quand je fais Abort sur mon thread et que je teste l'état après avec isAlive je m'aperçois que le thread n'a pas été Abort puisque toujours alive. Donc je voulais vous demander comment je pourrais faire pour l'arrêter complétement. Mon code :

namespace Serveur
{
    public partial class Serveur : Form
    {
       
        static Thread Server;
        bool redemarrage_serveur = false;
       
        public Serveur()
        {
            InitializeComponent();
            Server = new Thread(new ThreadStart(Ecoute));
            etat_serveur.Text = "Inactif";
            IP.Text = "127.0.0.1";
        }

        public void Ecoute()
        {
            try
            {
                int port = 80;
                IPAddress add = IPAddress.Parse(IP.Text);
                TcpListener SocketEcoute = new TcpListener(add, port);
                SocketEcoute.Start();
                Socket MySocket = SocketEcoute.AcceptSocket();
                MessageBox.Show("Un client s'est connecté !");
            }
            catch
            {
                MessageBox.Show("Erreur");
            }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (!redemarrage_serveur) Server.Start();
            else Server.Resume();
            etat_serveur.Text = "Démarré";
            suspendre.Enabled = true;
            demarrage.Enabled = false;
        }

        private void label1_Click(object sender, EventArgs e)
        {

        }

        private void etat_serveur_Click(object sender, EventArgs e)
        {

        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void arret_Click(object sender, EventArgs e)
        {
            Server.Suspend();
            etat_serveur.Text = "Suspendu";
            redemarrage_serveur = true;
            suspendre.Enabled = false;
            demarrage.Enabled = true;
        }

        private void button1_Click_1(object sender, EventArgs e)
        {
            if (Server.IsAlive) MessageBox.Show("Thread alive !");
            else MessageBox.Show("Thread détruit !");
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // ICI LE CODE POUR ARRETER LE THREAD
        }
    }
}

J'aimerais aussi savoir comment je pourrais lancer ma méthode à la fermeture (quelque soit la manière) du programme.

Merci, cordialement leodrel56.

3 réponses

MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
20 mai 2008 à 15:35
Salut,

La méthode Thread.Abort(); est bien la méthode à appeler pour arreter le Thread. Normalement il ne devrait pas y avoir de souci.
La méthode Thread.Resume() est , quant à elle, dépréciée

Rencontre-tu toujours le souci ?

Mx
MVP C# 
0
leodrel56 Messages postés 6 Date d'inscription jeudi 11 août 2005 Statut Membre Dernière intervention 20 mai 2008
20 mai 2008 à 17:30
Oui, j'ai beau cliqué sur le bouton "button2_click" qui est nommé en faite arrêt qui contient simplement Server.Abort(); et après cela je clique sur le "button1_click" qui contient le test du thread et ça me met toujours que le thread est "alive". Voilà je ne comprend pas trop où est le problème, je peux vous envoyez le projet si vous voulez. Merci.

leo...
0
leodrel56 Messages postés 6 Date d'inscription jeudi 11 août 2005 Statut Membre Dernière intervention 20 mai 2008
20 mai 2008 à 17:39
Sinon on utilise quoi à la place de Resume et Suspend ?? Merci d'avance !

leo...
0
Rejoignez-nous