Question Fenêtre flottante

Plus d'informations
il y a 15 ans 7 mois #7456 par Sylvain FOUCHER
Fenêtre flottante a été créé par Sylvain FOUCHER
Bonjour,

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.

Plus d'informations
il y a 15 ans 7 mois #7457 par Arthur
Réponse de Arthur sur le sujet Re:Fenêtre flottante
Si j'ai bien pigé il te faut un backgroundWorker.
(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.

Plus d'informations
il y a 15 ans 7 mois #7459 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Fenêtre flottante
Salut,
bilbao écrit:

Si j'ai bien pigé il te faut un backgroundWorker.

Avant de plonger dans ce type de conception, un $Form.Show() plus des messages peut suffire.
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.

Plus d'informations
il y a 15 ans 7 mois #7460 par Arthur
Réponse de Arthur sur le sujet Re:Fenêtre flottante

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. :evil:

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. :dry:

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#. :laugh:

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. :silly: )

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.

Plus d'informations
il y a 15 ans 7 mois #7467 par Laurent Dardenne
Réponse de Laurent Dardenne sur le sujet Re:Fenêtre flottante
bilbao écrit:

J'avoue que j'ai proposé une solution plutôt propre et généraliste

J'ai bien compris, je peux aussi me tromper :-)
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 \&quot;DoWork\&quot; -SourceIdentifier \&quot;DoWork\&quot; -Action (Anonymous DoWork)
Register-ObjectEvent $bgw \&quot;RunWorkerCompleted\&quot; -SourceIdentifier \&quot;Completed\&quot; -Action (Anonymous RunWorkerCompleted)
Register-ObjectEvent $bgw \&quot;ProgressChanged\&quot; -SourceIdentifier \&quot;ProgressChanged\&quot; -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:

Mais je ne sait pas trop comment les WinForms réagissent avec les Jobs.

J'ai proposé d'utiliser les possibilités de Powershell pour simplifier les choses, un job est un objet indépendant de la winform.
bilbao écrit:

Car on ne peut pas afficher de composants WinForms/WPF à partir d'un job ?

Je n'ai pas essayé, à moins que tu voulais dire \&quot;afficher dans un composant\&quot; (une listbox par exemple)...
bilbao écrit:

Il faut une gestion des événements?

Je pensais à des message Windows, mais une référence à la fenêtre principale peut suffire, encore une fois faut tester.

Tutoriels PowerShell

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 15 ans 5 mois #7832 par Sylvain FOUCHER
Réponse de Sylvain FOUCHER sur le sujet Re:Fenêtre flottante
Bonjour,

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.

Temps de génération de la page : 0.101 secondes
Propulsé par Kunena