Fige de programme

Résolu
Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018 - 14 juil. 2012 à 20:00
Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018 - 8 déc. 2012 à 18:20
Bonjour,
J'ai un programme qui cherche sur le disque dur des fichiers avec une fonction récursive ( je précise méme si j'aimerais elle est pas de moi

la voici

   // Procedure pour effectuer une recherche recursive des films
        private void DirSearch(string sDir, string pattern)
        {
            
           try
            {
                foreach (string f in Directory.GetFiles(sDir, pattern))
                {
                    bool skipFile = false;
                    foreach (string item in listBox6.Items)
                    {
                        if (f.ToUpper().IndexOf(item.ToUpper()) != -1)
                        {

                            skipFile = true;
                        }
                    }
                 


                    if (!skipFile)
                    {
                       
                        string test  =f.Substring(0, f.LastIndexOf(".")) + ".nfo";
                        if (File.Exists(test) != false)
                        {
                            
                            dataGridView1.Rows.Add(true, f.Substring(0, f.LastIndexOf("\") + 1), f.Substring(f.LastIndexOf("\") + 1));

                        }
                        else
                        {
                          dataGridView1.Rows.Add(false, Directory.GetDirectories(sDir), f.Substring(f.LastIndexOf("\") + 1));
                        }
                        toolStripStatusLabel1.Text = "Nombre de films : " + dataGridView1.RowCount;
                        
                    }
                }

                foreach (string d in Directory.GetDirectories(sDir))
                {
                    DirSearch(d, pattern);
  

                }
            }
            catch (System.Exception excpt)
            {
                //MessageBox.Show(excpt.Message);
            }
        }


Mais voici le problème , pendant cette recherche le problème " fige" si il y a trop de répertoire et de meme la liste et le nombre des fichiers trouvé ne s'actualise pas en temps reel, j'ai bien essayé de mettre ne pause le programme mais vu qu'il est en pause cela ne change rien.. j'ai testé de mettre une progresse barre pour faire patienter mais elle également ne s'actualise pas , et de plus je pars du principe que je ne connais pas le nombre de fichier trouvé donc pas de max possible

Auriez vous une idée pour forcé ce rafraichissement ?
merci
R A P A K O O T I

8 réponses

Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018
8 déc. 2012 à 18:20
Merci probleme resolu

R A P A K O O T I
3
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 juil. 2012 à 20:24
Bonjour,

A la place de travailler avec les contrôles, utilises des collections et piles (List<T>, Stack<T>, Queue<T>) et lances cette partie dans un thread (System.Threading.Thread ou BackGroundWorker).

Ensuite, utilises un Timer pour rafraichir régulièrement l'interface par les données des collections.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018
14 juil. 2012 à 21:22
Merci de ta réponse, qui même si elle me semble logique , me dit que j'ai du taf devant moi... afin de la mettre en place , n'ayant jamais bosser avec les collections, et que je gere le nom du fichier et la présence d'un nfo en même temps et que j'ai jamais bosse avec un BackGroundWorker, je sais j'ai pas bosse avec bcp de chose mais je me suis remit a la prog il y a peu et je me suis mis au c# en meme temps


Merci de encore de ta réponse, je laisse le sujet ouvert, je vais revenir :-)

R A P A K O O T I
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
14 juil. 2012 à 21:57
Bonjour,

Manipuler les connections, ce n'est pas dur.
Le fait d'utiliser listBox6, le fait en sous-jacent.

Concernant le fait de traiter les .NFO, ne change rien à la problématique ni à ton code.

Pour le BackGroundWorker, il y a pas mal d'exemple sur le net.

Le changement n'est pas très compliqué, mais demande à comprendre en détail le code et à manipuler la notion de thread et des limitations qui y incombe.

C'est en codant que l'on devient développeur.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018
14 juil. 2012 à 22:38
Merci je suis en train de regarder ca , et effectivement ca va etre tres utile, mais j'ai une derniere question, j'etais en train justement de regarde la listBox6, je comprend son fonctionnement avec la boucle, je suis en train de voir pour la convertir egalement en List<T>, mais ce que je comprend pas c est que je parcour la list mais a aucun moment je la "rempli" c est la ou j'avoue , je bloque pourrais tu eclairé ma lanterne?

R A P A K O O T I
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
15 juil. 2012 à 01:24
Bonjour,

Je pense que c'est pour exclure des fichiers contenant une chaine spécifiée.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
Rapakooti Messages postés 90 Date d'inscription mercredi 4 décembre 2002 Statut Membre Dernière intervention 18 mai 2018
16 juil. 2012 à 00:26
Merci encore pour ta réponse ca avance, ca avance,
alors j'ai choisis l'approche de creation de thread,
voici ou j'en suis .
j'ai un bouton qui permet de sélectionner l'emplacement des répertoires contenant les films
Voici le code qui si rapporte

 private void Bemplacement_Click_1(object sender, EventArgs e)
        {
            //Creation folderbrowser
            FolderBrowserDialog folderDlg = new FolderBrowserDialog();

            folderDlg.ShowNewFolderButton = true;

            // Montre le FolderBrowserDialog.

            DialogResult result = folderDlg.ShowDialog();
            // Si le bouton selectionnez est ok >
            if (result == DialogResult.OK)
            {

                Trepertoire.Text = folderDlg.SelectedPath;

                Environment.SpecialFolder root = folderDlg.RootFolder;

                //Effacement de la liste
                emplacement = null;
                //lance la recherche recursive
                recherche = new Thread(new ThreadStart(ThreadMethod));
               recherche.Start();
           
               }



     
        }


ce bouton créée donc un thread qui va lancé la recherche , je pensais derrière avec un timer cloner la liste ou autre car je dois gérer la presence ou pas du fichier NFO

Mais voila ou je bloque j'effectue une recherche recursive, donc j'ai modifie et allége le code de la recherche

    private void ThreadMethod()
        {
            string sdir = Trepertoire.Text;
            string pattern = "*.avi";
            try
            {
          
                foreach (string f in Directory.GetFiles(sdir, pattern))
                {
               
                 emplacement.Add(f);
                     
                }

                foreach (string d in Directory.GetDirectories(sdir))
                {
                   //VOILA LE PROBLEME 

                  DirSearch(d, pattern);


                }
            }
            catch (System.Exception excpt)
            {
                MessageBox.Show(excpt.Message);
            }
        }


Le souci se situe au niveau de la recursivité de la recherche , est ce que je dois cree un tread par recherche?? deja que je pense en cree deux en parallele pour gere l'extention du fichier et dans ce cas la comment les incrementer?

merci de vos reponse

R A P A K O O T I
0
NHenry Messages postés 15113 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 22 avril 2024 159
17 juil. 2012 à 23:48
Bonjour,

Tu peux faire un seul thread qui fera le listage des fichiers et la recherche du NFO.

Ensuite, il faut faire attention, créer trop de thread peut être contre productif.

---------------------------------------------------------------------
[list=ordered][*]Pour poser correctement une question et optimiser vos chances d'obtenir des réponses, pensez à lire le règlement CS, celui-ci pour bien poser votre question ou encore celui-ci pour les PFE et autres exercices.[*]Quand vous postez un code, merci d'utiliser la coloration syntaxique (3ième icône en partant de la droite : ).[*]En VB.NET pensez à activer Option Explicit et Option Strict (propriété du projet) et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).[*]Si votre problème est résolu (et uniquement si c'est le cas), pensez à mettre "Réponse acceptée" sur le ou les messages qui vous ont aidés/list
---
Mon site
0
Rejoignez-nous