Question WPF : exécuter un script à partir de la console

Plus d'informations
il y a 13 ans 1 mois #8989 par Baylocq
Salut à tous,

Me revoila pour un petit souci que je n'arrive pas à régler. Je me suis lancé dans un script utilisant l'interface wpf en me basant sur le tuto du livre d'Arnaud et Robin.

Ma fenêtre est bien faite, tout fonctionne quand je lance le script depuis l'éditeur Windows Powershell ISE. Mais quand je le lance via la console, j'obtiens un erreur

Exception lors de l'appel de « Load » avec « 1 » argument(s) : « Impossible de créer une instance de « Window » définie
dans l'assembly « PresentationFramework, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 ». Le thread appelant doit être en mode STA, comme l'exigent de nombreux composants de l'interface utilisateur.  »



Avez-vous un suggestion? Je ne pense pas que cela doit être compliqué, mais je ne suis pas une bête de la programmation et le thread ne me parle pas...

Merci bien!!;)

Message édité par: Fadaioli, à: 23/02/11 10:03<br><br>Message édité par: Arnaud, à: 23/02/11 22:18

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

Plus d'informations
il y a 13 ans 1 mois #8992 par Baylocq
Réponse de Baylocq sur le sujet Re:WPF...
Fallait mieux lire que ça...

Lancer Powershell avec l'option STA!!!

Pardon...:P

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

Plus d'informations
il y a 13 ans 1 mois #8998 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:WPF...
Salut !

Eh oui, il faut lire les messages d'erreur ! C'est ce que je m'évertue à dire à tous les PowerShelleurs débutants car ils sont extrêmement précis.

Donc, pour démarrer la console PowerShell en mode STA, le plus simple est de se créer un nouveau raccourci vers PowerShell.exe -sta.

A bientôt,

Arnaud

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 13 ans 1 mois #9000 par Richard Lazaro
Réponse de Richard Lazaro sur le sujet Re:WPF...
Bonjour,

Je suis pas tout à fait du même avis que toi arnaud :]
Pour moi le plus simple est d'utiliser ce petit morceau de code à place en début de script powershell :

[code:1]
if($host.Runspace.ApartmentState -ne 'STA')
{
PowerShell -Sta -File ($myInvocation.MyCommand.Path)
return
}
[/code:1]

Ce script regarde si il est lancé en mode STA, si ce dernier n'y est pas alors il le relance avec.

Dès que j'aurais du temps, je voudrais améliorer ce script pour qui ajoute automatiquement les paramètres passés pour le relancement.

(oui, car comme tu l'as compris, si tu as des paramètres il te faudra compléter le bout de code avec le paramètre -Args correctement rempli)

Bien Cordialement,
Richard Lazaro.

Think-MS : (Get-Life).Days | %{ Learn-More }

\\&quot;Problems cannot be solved by the same level of thinking that created them.\\&quot; - Albert Einstein

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

Plus d'informations
il y a 13 ans 1 mois #9001 par Arnaud Petitjean
Réponse de Arnaud Petitjean sur le sujet Re:WPF...
Pour ce qui concerne la simplicité, on va laisser les personnes concernées décider... ;)

En tout cas pour ma part j'ai pas réussi (honte à moi) à faire marcher ton bout de code.

Tiens voilà un exemple de script WPF qui dessine un rectangle; peut-être peux tu nous montrer comment tu fais ?

[code:1]
# WPF_rectangle.ps1

[xml]$XAML = @'
&lt;Window
xmlns=\&quot;schemas.microsoft.com/winfx/2006/xaml/presentation\";
xmlns:«»x=\&quot;schemas.microsoft.com/winfx/2006/xaml\";
Title=\&quot;Window1\&quot; Height=\&quot;300\&quot; Width=\&quot;300\&quot; &gt;
&lt;Grid&gt;
&lt;Rectangle Margin=\&quot;64,90,62,97\&quot; Name=\&quot;rectangle1\&quot; Stroke=\&quot;Red\&quot;
Fill=\&quot;AntiqueWhite\&quot; StrokeThickness=\&quot;5\&quot; RadiusX=\&quot;20\&quot; RadiusY=\&quot;20\&quot; /&gt;
&lt;/Grid&gt;
&lt;/Window&gt;
'@

$reader=New-Object System.Xml.XmlNodeReader $xaml
$Form=[Windows.Markup.XamlReader]::Load($reader)
$Form.ShowDialog() | Out-Null

[/code:1]<br><br>Message édité par: Arnaud, à: 24/02/11 00:07

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

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

Plus d'informations
il y a 13 ans 1 mois #9002 par Jacques Barathon
Réponse de Jacques Barathon sur le sujet Re:WPF...
Le bout de code de Richard marche bien chez moi. Curieux.

Quant à la simplicité d'une méthode ou de l'autre, c'est en effet à chacun de juger selon son besoin et ses contraintes. :)

Par contre, concernant le message d'erreur initial, je vous trouve durs avec fadaioli : il l'avait bien lu ce message, et il a d'ailleurs précisé qu'il ne comprenait pas cette histoire de thread. Et en effet, vous avouerez qu'il faut être un peu \&quot;aware\&quot; pour déduire de la formule \&quot;le thread appelant doit être en mode STA\&quot; qu'il faut relancer PowerShell avec le paramètre -sta.

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

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