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

Scripts/Batch Discussion :

Rafraichir une listbox [PowerShell]


Sujet :

Scripts/Batch

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Par défaut Rafraichir une listbox
    Bonjour tout le monde,

    J'ai un script assez conséquent, il réalise une grosse boucle, pour chaque boucle j'aimerai mettre le statut du traitement dans une listbox.

    Tout d'abord, savez-vous comment je peux insérer un élément en première position et non à la fin de la listbox ?

    Par ailleurs, l'affichage du contenu de cette listbox ne se fait qu'une fois le programme terminé (et non à chaque tour de boucle).

    Voyez-vous comment je peux faire pour résoudre ce souci de taille ?

    D'avance, un grand merci et très bon weekend à tous.

  2. #2
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Salut,
    Citation Envoyé par julie75 Voir le message
    Tout d'abord, savez-vous comment je peux insérer un élément en première position et non à la fin de la listbox ?
    La méthode Insert sur la propriété items de la listbox. Ne pas hésiter à consulter MSDN.
    Citation Envoyé par julie75 Voir le message
    Par ailleurs, l'affichage du contenu de cette listbox ne se fait qu'une fois le programme terminé (et non à chaque tour de boucle).

    Voyez-vous comment je peux faire pour résoudre ce souci de taille ?
    Sans le code sous les yeux, difficile de proposer une solution.
    Un refresh sur la Form ?

    Une piste en consultant le chapitre 5 de ce tutoriel, mais je ne suis pas sûr que l'implémentation soit adapté
    Sinon en V2 tu peux utiliser un Job couplé à des events, mais la aussi le code ne sera pas trivial.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Par défaut
    Ho lala... Doux Jésus Marie Joseph... le chapitre 5 de ton manuel m'a donné mal au crane, je n'ai rien compris pour ainsi dire (non pas que c'est mal expliqué loin de là, mais c'est juste utra compliqué pour mon petit cerveau).

    J'ai testé en faisant un form1.refresh ou un listbox3.refresh mais ça me fait pareil.

    Si tu as des pistes pour le couplage du job avec les events je suis preneuse car je suis en V2. Mais je pense effectivement que c'est un problème de runspace car lorque le programme se lance l'interface graphique n'a plus la main, si je clic sur celle-ci j'ai le message not responding.

    Sinon merci pour ton lien vers le msdn (que je regarderai plus souvent) j'ai trouvé comment faire pour insérer au début et non à la fin de ma liste :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $listbox3.items.insert(0,"Connection sur le switch : $remoteH")
    Merci pour ton aide en tout cas, si tu sens que c'est trop galère mon histoire de rafraichissement laisse tomber, ce n'est pas si important que ça, en faite je cherche juste à infomer dans mon interface graphique l'avancement du programme et non via un simple write-host, donc tant que le programme marche c'est le principale !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Par défaut
    Haaaa... En faite si j'ai bien compris ta doc je devrais utiliser des start-job afin d'exécuter en fond de tache ?

    ça m'a l'air pas mal en effet mais ça va être complexe à mettre en place car grosso modo j'ai :
    do{
    affichage dans ma listbox
    gros traitement
    }fin de mon do

    Je ne vois pas trop comment je vais pouvoir faire un start-job sur mon gros traitement.

  5. #5
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par julie75 Voir le message
    Ho lala... Doux Jésus Marie Joseph...
    Pas mieux !
    Citation Envoyé par julie75 Voir le message
    mais c'est juste utra compliqué pour mon petit cerveau
    Ici c'est plus du développement que du scritping, le dev n'est peut être pas ton métier ?
    Citation Envoyé par julie75 Voir le message
    si tu sens que c'est trop galère mon histoire de rafraichissement laisse tomber
    Il faut du temps que je n'ai pas en ce moment...

    Citation Envoyé par julie75 Voir le message
    En faite si j'ai bien compris ta doc je devrais utiliser des start-job afin d'exécuter en fond de tache ?
    Oui
    Citation Envoyé par julie75 Voir le message
    ça m'a l'air pas mal en effet mais ça va être complexe à mettre en place
    On a rien sans rien
    Citation Envoyé par julie75 Voir le message
    Je ne vois pas trop comment je vais pouvoir faire un start-job sur mon gros traitement.
    Le start-job effectue ton traitement itératif via un scriptblock passé en paramètre, ensuite tu émets chaque résultat dans le pipeline, puis tu utilises receive-job pour le récupérer. Enfine soit faire une boucle avec un wait-job ( changement d'état du job pas du pipeline) soit utiliser l'event StateChange du job (si je me souviens bien). Regarde le tutos sur les events sous PS, mais dans un premier temps le Wait-job peut suffire, tout en sachant que ce n'est peut être pas une solution, car il me semble qu'ainsi la collection Items n'est pas pour autant "protégée". N'ayant pas testé, je reste réservé sur cette approche.

    Si j'ai le temps je regarderais ces prochains jours, sinon n'hésite pas à relancer ce post à la rentrée, le sujet m'intéresse pour d'autres usages

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 127
    Par défaut
    Bonjour Laurent,

    Je me suis plongée dans les start-job, wait-job et les events. J'ai compris le concept mais n'ai pas réussi à l'utiliser dans mon script. Cela n'est pas grave car j'ai trouvé la soluce !

    Un simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [System.Windows.Forms.Application]::DoEvents()
    au début de ma boucle et le tour est joué, ça créer une instance ce qui permet d'afficher dans la listbox à chaque tour de boucle et plus de "not respond" quand je clic comme une malade dans la fenêtre.

    Soluce trouvée ici :
    http://www.sapien.com/blog/2011/07/1...ponsive-loops/

    Un grand merci Laurent pour ton aide et implication légendaire.

    Bon weekend !

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

Discussions similaires

  1. [NSIS] Comment rafraichir une listBox ?
    Par maanifiik dans le forum Windows
    Réponses: 7
    Dernier message: 08/04/2010, 18h01
  2. Rafraichir une ListBox
    Par sissi00000 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/07/2008, 17h30
  3. Rafraichir une ListBox
    Par blasme dans le forum ASP.NET
    Réponses: 10
    Dernier message: 07/04/2008, 15h53
  4. rafraichir une listbox
    Par yedid dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 21/08/2007, 11h21
  5. Réponses: 6
    Dernier message: 02/06/2006, 11h44

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