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 :

Savoir la fin des threads dans un threadpool


Sujet :

C#

  1. #1
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut Savoir la fin des threads dans un threadpool
    Bonjour,

    J'ai un projet où à chaque création de fichier, j'ai un traitement sur le dit fichier.
    J'utilise filesystemwatcher pour détecter la création du fichier.
    Sur l’événement de celui ci, je lance la tache dans le threadpool :
    code ci dessous :

    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
            public List<ManualResetEvent> ThState;
            private List<SearchEngineFrame> SEFState;
       private void FileAdded(String FullPath)
            {
                if (File.Exists(FullPath) && FullPath.Contains("wk") && (Path.GetExtension(FullPath).ToLower() == ".png" ||
                    Path.GetExtension(FullPath).ToLower() == ".jpg"
                    || Path.GetExtension(FullPath).ToLower() == ".jpeg"
                    || Path.GetExtension(FullPath).ToLower() == ".bmp"
                    || Path.GetExtension(FullPath).ToLower() == ".gif"))
                {
                    try
                    {
                        ManualResetEvent tmp = new ManualResetEvent(false);
                        SearchEngine d = new SearchEngine(   GlobalData.StartValue,tmp,"Ressources\\Scope.csp",Properties.Settings.Default.Ratio);
                        ThState.Add(tmp);
                        SEFState.Add(d);
     
                        ThreadPool.QueueUserWorkItem(d.ThreadPoolCallback, FullPath);
                        Thread.Sleep(500);
                        _NbFileCalculate += 1;
                        if (( _NbFileCalculate >=_NbFile) && (this.OnEnded != null)) 
                            OnEnded(this, new EventArgs());
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                    }
                }
            }
    Je connais le nombre de fichiers qui va être générer. Lorsque tout les fichiers sont générés, je désire fermer ma fenêtre. Avant cela, je voudrais savoir si toutes mes tâches sont bien terminées.
    Pour l'instant, j'utilise sur la demande d'arrêt de mon filesystemwatcher, le code ci dessous.
    Je ne pense pas que cela soit optimale car je bloque les threads :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
       foreach (ManualResetEvent obj in ThState) obj.WaitOne();
    Comment puis je faire ?

  2. #2
    Membre émérite
    Avatar de azstar
    Homme Profil pro
    Architecte Technique BizTalk/.NET
    Inscrit en
    Juillet 2008
    Messages
    1 198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Architecte Technique BizTalk/.NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 198
    Points : 2 424
    Points
    2 424
    Par défaut
    pourquoi ne faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WaitHandle.WaitAll(Events);
    pour plus de détails voir lien

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 753
    Points
    39 753
    Par défaut
    Citation Envoyé par azstar Voir le message
    pourquoi ne faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WaitHandle.WaitAll(Events);
    pour plus de détails voir lien
    Oui mais attention, c'est limité à 64 WaitHandles...

  4. #4
    Membre actif Avatar de Masmeta
    Homme Profil pro
    Ing. R&D informatique industrielle
    Inscrit en
    Mai 2006
    Messages
    472
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Ing. R&D informatique industrielle
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2006
    Messages : 472
    Points : 221
    Points
    221
    Par défaut
    la fonction WaitOne est hérité de Waithandle. (doc)

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/04/2010, 09h10
  2. Réponses: 0
    Dernier message: 27/04/2009, 19h49
  3. Problème d'utilisation des threads dans mes servlets
    Par casho dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 08/08/2007, 19h34
  4. Réponses: 12
    Dernier message: 30/11/2006, 19h42
  5. Attendre la fin des threads fils d'un processus
    Par SteelBox dans le forum Windows
    Réponses: 15
    Dernier message: 24/02/2006, 16h08

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