Thread.Abort()

Résolu
Utilisateur anonyme - 19 mai 2006 à 10:16
 Utilisateur anonyme - 19 mai 2006 à 11:16
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

Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
19 mai 2006 à 11:10
Est ce que tu appelle bien là méthode StopThreads sur la même instance de ta classe Threads?
3
Nikoui Messages postés 794 Date d'inscription vendredi 24 septembre 2004 Statut Membre Dernière intervention 19 août 2008 13
19 mai 2006 à 10:25
Question idiote, mais, tu appelle bien la méthode StartThreads avec true comme paramètre?
0
MorpionMx Messages postés 3466 Date d'inscription lundi 16 octobre 2000 Statut Membre Dernière intervention 30 octobre 2008 57
19 mai 2006 à 10:27
Salut

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

Mx
MVP C# 
0
Utilisateur anonyme
19 mai 2006 à 11:01
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);    }
        }
0

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

Posez votre question
Utilisateur anonyme
19 mai 2006 à 11:16
Merci beaucoup, c'etait ca, ce n'etait pas la meme instance de classe. Merci, merci et merci.
0
Rejoignez-nous