Fin d'un thread en .NET

Signaler
Messages postés
63
Date d'inscription
vendredi 6 décembre 2002
Statut
Membre
Dernière intervention
16 janvier 2009
-
Messages postés
32
Date d'inscription
lundi 3 février 2003
Statut
Membre
Dernière intervention
25 juillet 2012
-
Salut à toutes et à tous,

alors voici mon soucis, dans une application que je réalise en C#, j'utilise dans un de mes objets (que j'appelerai ici objB) un objet Thread, celui-ci est associé à une méthode qui se charge d'exécuter une requête HTTP et d'enregistrer le contenu. La durée d'enregistrement est fonction du contenu. Je dispose d'une autre classe (objA) qui elle possède un Timer qui tout les X millisecondes va créer un certains nombre d'objB et les initialiser (en donnant entre autre l'adresse de l'url à exécuter). Jusqu'ici tut va bien dira t'on .
Mon soucis est qu'apres la 1ère exécution, dans la méthode de mon timer je réintialise mon objetA, lors du retour à la phase d'initialisation des objets B, je rencontre une exception au moment du objBThread.start() qui est censé lancer la méthode d'enregistrement. L'erreur est " Le thread est en cours d'exécution ou arrêté ; il ne peut pas redémarrer."

Je n'arrive pas à comprendre pourquoi car en principe il s'agit d'un nouvel objet...Alors où est le lien ? Les précédents threads sont ils toujours en ours d'exécution ? Faut il forcer la fin d'un thread une fois que le traitement dans la méthode est terminé ? Comment faire cela ?

Merci pour votre aide

Frederyck

3 réponses

Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
50
Comme ca, je sais pas trop d'ou vient le prbleme. Mais essaie
d'attendre la fin d'execution des threads (apres ton thread.Start(); tu
forces l'attenre en ajoutant thread.Join());



Au pire, Abort tes Threads quand ton timer se déclenche...

Mais sinon, je pense qu'on arriverais mieux a visualiser la chose avec un peu de code.




Mx
Messages postés
32
Date d'inscription
lundi 3 février 2003
Statut
Membre
Dernière intervention
25 juillet 2012

Salut
j'ai le même problème que toi - as tu une solution ?


Zan
Messages postés
32
Date d'inscription
lundi 3 février 2003
Statut
Membre
Dernière intervention
25 juillet 2012

J'ai trouvé pour moi une solution.

Avant de faire un start de ton thread, tu test son état.

if (ThreadService.ThreadState == ThreadState.Unstarted) ThreadService.Start();

else if (ThreadService.ThreadState == ThreadState.Stopped)
{
ThreadService.Abort();
ThreadService = null;
ThreadService = new Thread(new ThreadStart(FctThreadScruteService));
ThreadService.Start();
}


Donc si l'état du service est ThreadState.Stopped, tu Abord ton service pour ensuite le redéfinir et le redemarrer.

Quand aux Pourquoi ?
je sais pas!


Zan