IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Stopper un thread


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut Stopper un thread
    Bonjour tout le monde,

    je viens vous voir aujourd'hui pour un petit problème tout bête mais dont je trouve pas comment m'en sortir.

    Prenons un exemple très simple. Je propose à l'utilisateur une liste de départements. Dès qu'il choisit un département, je lance un thread qui va rechercher toutes les villes de ce département.

    Le problème, c'est que si pendant un thread tourne l'utilisateur choisit un autre traitement, un deuxième thread est lancé mais le premier tourne toujours.

    J'aimerai donc au moment du lancement du second thread pourvoir stopper le premier. Auriez-vous une idée de comment faire ?

    Merci d'avance

  2. #2
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Il y a plusieurs façons de faire, selon ce que tu utilises

    Quelle version du Framework utilises-tu ?

    Est-ce que tu utilises des Tasks ? Ou des BackgroundWorkers ? Ou des Threads classiques ?
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  3. #3
    Rédacteur

    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    494
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2007
    Messages : 494
    Par défaut
    Alors j'utilise le Framework 4.0 avec des Threads classiques (je ne peux pas changer la version du framework mais je peux bosser sur autre chose que les threads si nécessaire :p )

  4. #4
    Modérateur
    Avatar de DotNetMatt
    Homme Profil pro
    CTO
    Inscrit en
    Février 2010
    Messages
    3 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : CTO
    Secteur : Finance

    Informations forums :
    Inscription : Février 2010
    Messages : 3 611
    Billets dans le blog
    3
    Par défaut
    Ok merci pour ces précisions ! Personnellement j'ai plus d'expérience avec les tasks, et j'utilise le "Cancellation Framework", qui est assez simple à utiliser et à comprendre (il suffit de lire un peu la MSDN).

    Sinon, tu peux utiliser une variable volatile de type bool afin de gérer l'exécution des threads. Voici une discussion assez complète sur le sujet : http://stackoverflow.com/questions/3...another-thread
    Less Is More
    Pensez à utiliser les boutons , et les balises code
    Desole pour l'absence d'accents, clavier US oblige
    Celui qui pense qu'un professionnel coute cher n'a aucune idee de ce que peut lui couter un incompetent.

  5. #5
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 197
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 197
    Par défaut
    3 méthodes
    la bien mais pas toujours utilisable c'est d'avoir un booléen comme dit précédemment, mais c'est pratique quand on a une boucle (pour pouvoir vérifier le booléen souvent et sortir du void)
    la moins bien c'est .abort sur le thread, ca déclenche une exception qui se propage à travers tous les catchs apparemment, donc ca arrete le thread, par contre le premier throw peut se trouver dans le framework, voir s'il n'y a pas d'effets de bords ...
    la 3ème je ne sais pas trop quoi en penser c'est .interrupt sur le thread, là ca arrête le thread où il en était directement ...
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  6. #6
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    d'après un bouquin que j'avais lu, le abort est à éviter à tout prix, sauf en ultime recourt. Je ne me rappelle plus dans le détail mais ça n'était pas qu'une question d'exception.

    Je crois que le interrupt est très proche du abort mais ne lève pas d'exception.

    A ma connaissance il n'y a pas d'autre choix que celui du booléen qu'on interroge régulièrement. J'ai personnellement une préférence pour le Cancel du BackgroundWorker.

    Edit : je viens de voir dans mon bouquin, le FrameWork 4 propose CancellationToken et CancellationTokenSource. Ca peut valoir le coup d'oeuil...

Discussions similaires

  1. [thread] Stopper un thread
    Par poukill dans le forum Threads & Processus
    Réponses: 6
    Dernier message: 04/12/2008, 17h34
  2. Stopper un thread après un certain temps
    Par Rodrigue dans le forum C++/CLI
    Réponses: 1
    Dernier message: 14/04/2008, 13h25
  3. Arrêter / Stopper un Thread défini
    Par ouranos21 dans le forum Concurrence et multi-thread
    Réponses: 6
    Dernier message: 30/01/2008, 14h25
  4. Stopper un thread par un signal
    Par kazh75 dans le forum Général Python
    Réponses: 4
    Dernier message: 04/04/2007, 14h53
  5. Stopper un thread
    Par Tenguryu dans le forum C++Builder
    Réponses: 2
    Dernier message: 29/07/2006, 21h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo