Question Fenêtre flottante
- Sylvain FOUCHER
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 5
- Remerciements reçus 0
J'ai une application en PowerShell qui enchaine plusieurs fenêtres modales.
Par contre, chaque fenêtre fait des traitements plus ou moins long et pour cela, j'aurai aimé avoir une fenêtre flottante qui ne bloque pas les traitements de la fenêtre en cours et dont je puisse mettre à jour le contenu afin que les utilisateurs finaux est un point d'avancement des tâches en cours (une sorte de Write-Host dans une fenêtre autre que la console).
Une fois les traitements terminés, cette fenêtre flottante sera fermée par la fenêtre en cours.
J'ai cherché un peu partout sur le net mais je n'ai pas trouvé le moyen de faire cette fenêtre flottante.
Merci d'avance pour toute aide
Connexion ou Créer un compte pour participer à la conversation.
- Arthur
- Hors Ligne
- Membre elite
- Messages : 226
- Remerciements reçus 0
(Voir google )
Pour que le BackgroundWorker marche il faut lancer le script en mode STA sous PS v2
www.eggheadcafe.com/software/aspnet/3315...-and-unit-tests.aspx
www.scriptinganswers.com/forum2/forum_posts.asp?TID=3749
code.msdn.microsoft.com/PowerShellPack
code.msdn.microsoft.com/PowerShellPack/R....aspx?ReleaseId=3343
Sinon Laurent parle dans ce post de lancer des Winforms dans des runspace, si tu as Powershell V1 cela peut être intéressant, mais je ne garantis rien.
www.powershell-scripting.com/index.php?o...;id=3488&catid=4
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
bilbao écrit:
Avant de plonger dans ce type de conception, un $Form.Show() plus des messages peut suffire.Si j'ai bien pigé il te faut un backgroundWorker.
J'avais regardé un peu le backgroundWorker, mais je ne suis pas sûr que cela soit la bonne approche sous PS.
Peut-être vaut-il mieux combiner des jobs et des WinForm.
Ensuite pour moi c'est difficile de proposer une solution sans connaitre le contexte dans le détail.
Par exemple est-ce que, une fois un traitement long lancé, la fenêtre ('secondaire') liée a-t-elle tjrs un rôle à jouer ou est-elle là uniquement pour paramètrer un traitement ?
Ensuite avec des fenêtres flottant cela résoud un pb mais en apporte d'autres, peut-on lancer + fois le même traitement ? Comment empêcher la fermeture de la fenêtre principale alors que les tâches sont encore active ? Comment arrêter une tâche ? etc.
Peut-on lancer + fois ce script ?
Un script simple permettrait d'étudier un peu mieux le scénario.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Arthur
- Hors Ligne
- Membre elite
- Messages : 226
- Remerciements reçus 0
Ensuite pour moi c'est difficile de proposer une solution sans connaitre le contexte dans le détail.
J'avoue que j'ai proposé une solution plutôt propre et généraliste, je n'ai pas encore eu à rencontrer ce problème car le seul script(lourd) que j'ai codé utilisant un GUI, je préfère que l'interface soit figé comme ca Mme Michu fait pas de conneries pendant le traitement.
Sinon oui on pourrait lancer les traitements en tache de fond cela semble viable comme solution.
Mais je ne sait pas trop comment les WinForms réagissent avec les Jobs.
Car on ne peut pas afficher de composants WinForms/WPF à partir d'un job ? Il faut une gestion des événements?
Sinon il y a Windows Powershell pack qui semble répondre au problème ( cf mes liens ) mais je ne l'ai pas encore utilisé.
Sinon Go C#.
Edit : C'est vrai qu'avec Powershell on a facilement tendance à réaliser de véritables Applications que l'on devrait normalement coder dans un véritable langage de programmation ( Powershell est TROP puissant. )
Message édité par: bilbao, à: 26/07/10 13:49<br><br>Message édité par: bilbao, à: 26/07/10 13:51
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
- Messages : 6302
- Remerciements reçus 68
J'ai bien compris, je peux aussi me tromperJ'avoue que j'ai proposé une solution plutôt propre et généraliste
On peut bien sûr implémenter ce composant, mais l'exécution du code des events doit se faire dans un contexte PowerShell, donc dans une instance de PSEventJob :
[code:1]
Register-ObjectEvent $bgw \"DoWork\" -SourceIdentifier \"DoWork\" -Action (Anonymous DoWork)
Register-ObjectEvent $bgw \"RunWorkerCompleted\" -SourceIdentifier \"Completed\" -Action (Anonymous RunWorkerCompleted)
Register-ObjectEvent $bgw \"ProgressChanged\" -SourceIdentifier \"ProgressChanged\" -Action (Anonymous ProgressChanged)
[/code:1]
L'event StateChanged d'un PSJob gére les statuts suivant : Completed,Failed,NotStarted,Running,Stopped
On peut s'y abonner et les gérer dans la fenêtre principale, faut tester.
bilbao écrit:
J'ai proposé d'utiliser les possibilités de Powershell pour simplifier les choses, un job est un objet indépendant de la winform.Mais je ne sait pas trop comment les WinForms réagissent avec les Jobs.
bilbao écrit:
Je n'ai pas essayé, à moins que tu voulais dire \"afficher dans un composant\" (une listbox par exemple)...Car on ne peut pas afficher de composants WinForms/WPF à partir d'un job ?
bilbao écrit:
Je pensais à des message Windows, mais une référence à la fenêtre principale peut suffire, encore une fois faut tester.Il faut une gestion des événements?
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Sylvain FOUCHER
- Auteur du sujet
- Hors Ligne
- Nouveau membre
- Messages : 5
- Remerciements reçus 0
Désolé de ne pas avoir répondu plus tôt mais j'ai du travailler sur des projets plus prioritaire (+ les vacances).
Merci pour ces réponses, je vais analyser tout ça et voir ce que je peux faire.
Sinon, cette fenêtre flottante n'est qu'informative.
Un des cas est l'analyse des comptes et des groupes de plusieurs de nos domaines (par la fenêtre principale dont l'interface graphique ne doit pas être modifiée ; encore l'idée de mon chef).
Par contre, ces analyses peuvent être longues et je voudrais donc afficher dans la fenêtre flottante les étapes au fur et à mesure qu'elles sont faites dans la fenêtre principale :
• Traitement domaine 1
- Analyse des comptes
- Analyse des groupes
• Traitement domaine 2
- Analyse des groupes
- Analyse des groupes
• Consolidation des données
Une fois tous les traitements finis, la fenêtre principale fermera cette fenêtre flottante et affichera les résultats désirés.
C'est le fonctionnement qui était fait par un ancien programme en VB qu'on m'a demandé de réécrire et faire évoluer en PS.
Connexion ou Créer un compte pour participer à la conversation.
- Vous êtes ici :
- Accueil
- forum
- PowerShell
- Entraide pour les initiés
- Fenêtre flottante