Arret d'un thread

Signaler
Messages postés
26
Date d'inscription
mercredi 3 mars 2004
Statut
Membre
Dernière intervention
21 avril 2005
-
Messages postés
26
Date d'inscription
mercredi 3 mars 2004
Statut
Membre
Dernière intervention
21 avril 2005
-
Bonjour,

J'essaye d'arreter proprement un thread de cette manière :
t.Abort();
ce qui effectue bien l'arret du thread ...mais il m'affiche un message :
"Thread was being aborted"

Comment puis-je "bloquer" ce message et afficher un message perso ?
(Note : j'ai essayé avec try/catch mais sans résultats)

Merci de votre aide !

5 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Tu peux toujours aussi attendre la fin de l'execution du Thread, avec la méthode tonThread.Join();



Mais tu devrais poster un bout de code pour qu'on puisse t'aider plus efficacement.



Mx
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
Tu n'arrives pas a catcher l'exception ThreadAbortException ?
Messages postés
26
Date d'inscription
mercredi 3 mars 2004
Statut
Membre
Dernière intervention
21 avril 2005

Je viens d'essayer et je peux catcher l'exception au niveau de la fonction appeler par le thread mais j'ai toujours le message en plus de mon propre message !
//**********************

private void LaunchDownload()


{


t
= new Thread(new ThreadStart(DownloadFiles
));


t
.Start();


}

public void DownloadFiles()
{
try{
//Téléchargement d'un ou plusieurs fichiers
}
catch(ThreadAbortException tex)
{
ut.Mbox("debug",tex.Message,1);
}
}

void BtnCancelClick(object sender
, System
.EventArgs e
)


{


t.Abort();


}

Voilà
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
46
J'ai pris une form avec 2 boutons (button1 et button2). Compilé en exe pour pouvoir ecrire dans la console.

Avec le code ci dessous, (qui n'a rien de special), ca marche.

Si je commente le message dans le catch, je n'ai pas de message (mais ca ne plante pas).

C'est le résultat voulu il me semble. Donc apres je comprends pas pourquoi ca marche pas chez toi.

Si tu veux un message perso a la place du "Thread wad being aborted", tu changes juste

Console.WriteLine(tex.Message);

par

Console.WriteLine("Mon message perso");




private void LaunchDownload()

{

     t = new Thread(new ThreadStart(DownloadFiles));

     t.Start();

}



 public void DownloadFiles()

{

    while(true)

    {

         try

        {

            Console.WriteLine(""+ i++);

            Thread.Sleep(100);

        }

        catch(ThreadAbortException tex)

        {

             Console.WriteLine(tex.Message);

        }

    }

}



private void button1_Click(object sender, System.EventArgs e)

{

         t.Abort();

 }



private void button2_Click(object sender, System.EventArgs e)

{

     LaunchDownload();

}







Mx
Messages postés
26
Date d'inscription
mercredi 3 mars 2004
Statut
Membre
Dernière intervention
21 avril 2005

Enfin !

Je viens de trouver ! En fait j'avais deux try/catch imbriqués et j'avais catché le tex dans le try le plus haut donc ...
Solution : Supprimé un catch !

Merci pour ton aide !

Code :
try{
aa
bb
try{
cc
dd
}
catch(Exception e) { mon message}

ee
}
catch(ThreadAbortException tex) { mon message }

PAS BON !!!

try{
aa
bb
}
catch(ThreadAbortException tex) { mon message }

BON !