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

Windows Forms Discussion :

Multi Thread Abort()


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 59
    Par défaut Multi Thread Abort()
    Bonjour,

    je test le fonctionnement de plusieurs thread.

    mais j'ai un probleme pour les fermer.

    ex:

    un btn:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public Thread t1;
    public Thread t2;
     
    private void button1_Click(object sender, EventArgs e)
            {
                t1 = new Thread(new ThreadStart(ThreadLoop1));
                t1.Start();
     
                t2 = new Thread(new ThreadStart(ThreadLoop2));
                t2.Start();
            }
    et pour fermer un autre btn:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
            {
                t1.Abort();
                t2.Abort();
            }
    code du thread:

    Code : 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
     
    private void ThreadLoop1()
            {
                while (Thread.CurrentThread.IsAlive)
                {
                    Thread.Sleep(1000);
                    SyncDelegate del = new SyncDelegate(Method_Sync);
                    listBox1.BeginInvoke(del, new object[] { DateTime.Now + " ThreadID: " + Thread.CurrentThread.ManagedThreadId, EventArgs.Empty });
                }
            }
     
    private void ThreadLoop2()
            {
                Thread.Sleep(500);
                while (Thread.CurrentThread.IsAlive)
                {
                    Thread.Sleep(1000);
                    SyncDelegate del = new SyncDelegate(Method_Sync);
                    listBox1.BeginInvoke(del, new object[] { DateTime.Now.Millisecond + " ThreadID: " + Thread.CurrentThread.ManagedThreadId, EventArgs.Empty });
                }
            }
    mon probleme:

    si je clique plusieur fois sur le btn1, il me lance plusieurs fois t1 et t2. mais quand je clique sur le btn2 il me coupe que le dernier thread t1 et t2.

    comment faire pour fermer tous les thread demarrer?

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Crée une collection de Thread, car avec ce code tu ne gardes une référence que sur les 2 derniers threads créés, tu n'as plus accès aux autres donc.

    Code : 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
    private List<Thread> _threads = new List<Thread>();
     
    private void button1_Click(object sender, EventArgs e)
    {
        Thread t = new Thread(new ThreadStart(ThreadLoop1));
        _threads.Add(t);
        t.Start();
     
        t = new Thread(new ThreadStart(ThreadLoop2));
        _threads.Add(t);
        t.Start();
    }
     
    private void Form1_FormClosed(object sender, FormClosedEventArgs e)
    {
        foreach(Thread thread in _threads)
        {
            thread.Abort();
        }
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    59
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 59
    Par défaut
    Merci, c'est bien se que je cherchais.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. Réponses: 2
    Dernier message: 15/05/2004, 18h33
  3. Réponses: 16
    Dernier message: 30/01/2004, 11h05
  4. [VB6][active x] faire du multi-thread avec vb
    Par pecheur dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 20/05/2003, 12h01
  5. [Kylix] exception qtinft.dll et multi-threading
    Par leclaudio25 dans le forum EDI
    Réponses: 3
    Dernier message: 27/03/2003, 18h09

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