Thread.Abort() [Résolu]

Signaler
-
 Utilisateur anonyme -
Bonjour,


Pour la premiere fois, j'utilise les threads alors, pour me faire la
main j'ai fait un petit programme pour voir comment ca fonctionne, j'ai
compris, ca n'est pas bien complique. J'ai donc refais la meme chose
dans mon application mais la...je ne comprends pas, le compilateur me
genere une erreur comme quoi le Thread en question serait null lorsque je fais "Thread.Abort();". Voici le code qie j'utilise :

using System;
using System.Threading;
using System.Windows.Forms;

namespace Project

{

    public class Threads

    {

        // Declaration of all the threads for being accessible in all the class

        public Thread video1;


        public Threads ()

        {

        }


        public void StartThreads (bool cam1)

        {

            if (cam1==true)

            {

                video1 = new Thread(new ThreadStart(AnalysePicture));

                video1.Start();

            }

        }


        public void StopThreads ()

        {

            // C'est ici que l'instruction Abort ne fonctionne pas

            try
            {

                video1.Abort();

                MessageBox.Show("Arret du thread");

            }

            catch(Exception ex)    {    MessageBox.Show("" + ex);    }

        }


        private void AnalysePicture ()

        {

            while (true)

            {

                // C'est ici que le thread travaille

                Thread.Sleep(1000);

            }

        }

    }

}


Je ne sais pas ce qui peut etre deffectueux (peut etre moi ?) mais il
me semble bien avoir fait exactement pareil dans une autre class.
L'intitule exact de l'erreur est :
System.NullReferenceException : Object reference not set to an instance of an object.

Merci d'avance pour toute aide qui pourrait m'etre apportee.

5 réponses

Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
Est ce que tu appelle bien là méthode StopThreads sur la même instance de ta classe Threads?
Messages postés
794
Date d'inscription
vendredi 24 septembre 2004
Statut
Membre
Dernière intervention
19 août 2008
9
Question idiote, mais, tu appelle bien la méthode StartThreads avec true comme paramètre?
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
44
Salut

Tu es sur de bien appeler la métode StartThreads avant d'appeler StopThreads dans ton code ?

Mx
MVP C# 

Aucun probleme pour lancer le thread, je lance bien le thread puisque
pour tester, je lancais une message box dans mon thread qui m'indiquait
l'etat de celui-ci (toutes les secondes). Celui etait tout le temps
running et lorsque je voulais l'arreter, il faisait l'erreur que
j'indiquais dans le message precedent.


J'ai modifie mon code comme ceci :

        public Threads ()
        {
            video1 = new Thread(new ThreadStart(AnalysePicture));
        }

        public void StartThreads (bool cam1)
        {
            if (cam1==true)
            {
                video1.Start();
            }
        }

Maintenant, je n'ai plus cette erreur mais cette fois c'est le
thread qui ne veut pas s'arreter alors que la methode StopThreads est
bien appelee (affichage d'une message box). Alors ma nouvelle question
est la suivante, comment se peut il que ce code s'execute sans pour
autant arreter le thread ?

        public void StopThreads ()
        {
            // C'est ici que l'instruction Abort ne fonctionne pas
            try
            {
                video1.Abort();
                MessageBox.Show("Arret du thread");
            }
            catch(Exception ex)    {    MessageBox.Show("" + ex);    }
        }

Merci beaucoup, c'etait ca, ce n'etait pas la meme instance de classe. Merci, merci et merci.