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#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Décembre 2005
    Messages
    163
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2005
    Messages : 163
    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 confirmé
    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
    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
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    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
    Membre émérite
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    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 émérite
    Inscrit en
    Octobre 2006
    Messages
    587
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Octobre 2006
    Messages : 587
    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, 09h17
  2. Réponses: 1
    Dernier message: 30/08/2006, 19h00
  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, 13h38
  4. Réponses: 14
    Dernier message: 17/08/2006, 10h29
  5. mon trigger ne fonctionne pas !
    Par japi33 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 20/03/2006, 21h26

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