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 :

Threading : mon abort ne fonctionne pas :(


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 163
    Points : 102
    Points
    102
    Par défaut Threading : mon abort ne fonctionne pas :(
    Bonjour,

    J'essaye d'arrêter un thread après un clic sur un bouton mais le thread en question ne s'arrête pas !

    Je vous mets le code :

    Code c# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    public DrivingMode()
            {
                InitializeComponent();
                monThread2 = new Thread(new ThreadStart(CallPositionsThreading));
                monThread2.Start(); // On lance le thread permettant l'affichage temps réel des positions.       
            }
     
            private void CallPositionsThreading()
            {
                if (nbr_position < 15)
                {
                    UpdateCarPosition(nbr_position);
                    Thread.Sleep(0);
                }
            }
     
            private delegate void CallPositionsThreadingDelegate(int nbr_position);
            private void UpdateCarPosition(int nbr_position)
            {
                if (this.InvokeRequired)
                {
                    // we were called on a worker thread
                    // marshal the call to the user interface thread
                    this.Invoke(new CallPositionsThreadingDelegate(UpdateCarPosition), new object[] { nbr_position });
                    return;
                }
     
                // this code can only be reached
                // by the user interface thread
     
                Coord.GetJustOnePosition(positions,DriverCoord,nbr_position);
                DisplayMapFromOneCoord(positions, drivingmodemap.Height, drivingmodemap.Width,500);
     
            }
     
     
            private void menuItem1_Click(object sender, EventArgs e)
            {
               // Malgré l'Abort, le thread n'est pas stoppé !
                monThread2.Abort();
                Close();
            }

    Une idée?
    Merci!

  2. #2
    Expert éminent sénior
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Points : 13 380
    Points
    13 380
    Par défaut
    Ben là c'est bizarre, Abort est censé aborté le thread

    Comment tu vois que le thread est toujours actif ?
    Tu as essayé de mettre un breakpoint sur la Abort pour voir si tu passes dessus ?

  3. #3
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Je ne crois pas qu'on puisse faire un abort sur un thread suspendu.
    Je n'arrive plus à retrouver ou j'ai lu ça, mais le système d'exploitation ne planifie pas d'execution du thread si sleep (ou Suspend) est appelé.
    Donc logiquement, impossible de générer un ThreadAbortException

    A priori, il faudrait relancer le thread juste au moment de Abort pour que cela fonctionne...

    A vérifier...

    Edit: Finalement, en consultant la doc, je suis moins sur de mes dires ...

  4. #4
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Après relecture du code ..., j'ai peut être une piste

    Dans quel thread est executé ceci ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    private void menuItem1_Click(object sender, EventArgs e)
            {
               // Malgré l'Abort, le thread n'est pas stoppé !
                monThread2.Abort();
                Close();
            }
    


    Quel est l'état du thread principal au moment de l'appel de cette procédure ?

  5. #5
    Membre éclairé
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    Points : 706
    Points
    706
    Par défaut
    Citation Envoyé par Kelpan Voir le message
    Je ne crois pas qu'on puisse faire un abort sur un thread suspendu.
    C'est déjà déconseillé de suspendre un thread

Discussions similaires

  1. Thread.Abort ne fonctionne pas
    Par alexxxx69 dans le forum C#
    Réponses: 2
    Dernier message: 11/10/2012, 10h17
  2. Réponses: 1
    Dernier message: 30/08/2006, 20h00
  3. [VB.Net/DataReader] Pourquoi mon ExecuteReader ne fonctionne pas ?
    Par emeraudes dans le forum Accès aux données
    Réponses: 8
    Dernier message: 21/08/2006, 14h38
  4. Réponses: 14
    Dernier message: 17/08/2006, 11h29
  5. mon trigger ne fonctionne pas !
    Par japi33 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 20/03/2006, 22h26

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