none
Recherche de dossier récursif + do events RRS feed

  • Question

  • Bonjour,

    J'utilise une recherche de dossier en mode récursif :

    For Each foundDirectory In My.Computer.FileSystem.GetDirectories(My.Settings.MON_REP.ToString, FileIO.SearchOption.SearchAllSubDirectories, SearchString)

    Le problème est que la recherche peut durer assez longtemps et la Form reste figée.

    J'ai placé un gif animé en guise de progressbar mais il reste figé. L'animation reprends lorsque la recherche est terminée.

    Peut-on utiliser un DoEvents durant la fonction de recherche ?

    Merci d'avance


    H.Sabatou

    jeudi 24 octobre 2013 15:40

Réponses

  • Si vous êtes sous VS 2012, vous pouvez vous amuser avec les Task

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Marqué comme réponse HSabatou jeudi 31 octobre 2013 14:57
    vendredi 25 octobre 2013 07:44
  • Finalement, j'ai trouvé une partie de la réponse

    J'ai utilisé un BackgrounWorker.L'opération se fait bien en tache de fond et le gif devient animé.

    Par contre à la fin de la recherche j'ai n bout de code qui récupere la liste des dossiers trouvés pour remplir un treeview.

    J'ai un message d'erreur qui me dit :

    L'action effectuée sur ce contrôle est appelée à partie d'un thread incorrect.

    Vous devez marshaler le thread correct en utilisant Control.Invoke ou Control.BeginInvoke pour effectuer cette action.

    Comment puis-je re-basculer sur le thread principal  à la fin du thread secondaire ?

    J'ai essayé avec RunWorkerCompleted mais ca na pas l'air de fonctionner.

    @+


    H.Sabatou

    • Marqué comme réponse HSabatou vendredi 25 octobre 2013 06:14
    jeudi 24 octobre 2013 16:10

Toutes les réponses

  • Finalement, j'ai trouvé une partie de la réponse

    J'ai utilisé un BackgrounWorker.L'opération se fait bien en tache de fond et le gif devient animé.

    Par contre à la fin de la recherche j'ai n bout de code qui récupere la liste des dossiers trouvés pour remplir un treeview.

    J'ai un message d'erreur qui me dit :

    L'action effectuée sur ce contrôle est appelée à partie d'un thread incorrect.

    Vous devez marshaler le thread correct en utilisant Control.Invoke ou Control.BeginInvoke pour effectuer cette action.

    Comment puis-je re-basculer sur le thread principal  à la fin du thread secondaire ?

    J'ai essayé avec RunWorkerCompleted mais ca na pas l'air de fonctionner.

    @+


    H.Sabatou

    • Marqué comme réponse HSabatou vendredi 25 octobre 2013 06:14
    jeudi 24 octobre 2013 16:10
  • Bonjour,

    Cela fonctionne parfaitement avec le  BackgroundWorker et RunWorkerCompleted.

    J'avais juste une erreur dans une ligne

    Cdlt,


    H.Sabatou

    vendredi 25 octobre 2013 06:14
  • Si vous êtes sous VS 2012, vous pouvez vous amuser avec les Task

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    • Marqué comme réponse HSabatou jeudi 31 octobre 2013 14:57
    vendredi 25 octobre 2013 07:44
  • Bonjour Richard,

    Merci pour l'info.

    Je ne connaissais pas les Tasks. Ça a l'air d'offrir beaucoup de possibilité.

    Cdlt


    H.Sabatou

    lundi 28 octobre 2013 07:21
  • Oui, avec optimisation pour vous de la part du compilateur, meilleure gestion des exceptions, etc.

    Bref, à utiliser en priorité. Et en plus, avec les syntaxes await/async, c'est encore plus facile.


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    lundi 28 octobre 2013 07:43