Question WPF et communication entre runspaces

Plus d'informations
il y a 12 ans 9 mois #15078 par SiSMik
Bonjour,

Je rencontre un point de blocage sur une interface que je souhaite empêcher de freezer lors de longs traitements.
Pour éviter ce \"freeze\" je lance mon interface et les futurs traitements dans des runspaces différents et j'y accède par le biais d'une hashtable synchronized en utilisant le concept de \"Thread Safe Collection\".

Pour l'instant mon script est le suivant:
[code:1]
$Hash = [hashtable]::«»Synchronized(@{})
$Runspace =[runspacefactory]::CreateRunspace()
$Runspace.ApartmentState = \"STA\"
$Runspace.ThreadOptions = \"ReuseThread\"
$Runspace.Open()
$Runspace.SessionStateProxy.SetVariable(\"Hash\",$Hash)
$psCmd = [PowerShell]::Create().AddScript({
[xml]$xaml = @\"
<Window
xmlns=\"schemas.microsoft.com/winfx/2006/xaml/presentation\";
xmlns:«»x=\"schemas.microsoft.com/winfx/2006/xaml\";
x:Name=\"Window\" Title=\"OBS - Template Factory - \" Height=\"622\" Width=\"808\" ResizeMode=\"NoResize\">
<Grid Background=\"Gainsboro\">
<GroupBox Header=\"vCenter Properties\" HorizontalAlignment=\"Left\" Margin=\"10,10,0,0\" VerticalAlignment=\"Top\" Height=\"60\" Width=\"782\" FontWeight=\"Bold\"/>
<TextBox x:Name=\"TextBox\" HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"94,34,0,0\" VerticalAlignment=\"Top\" Width=\"149\"/>
<Label Content=\"Username\" HorizontalAlignment=\"Left\" Margin=\"258,32,0,0\" VerticalAlignment=\"Top\"/>
<TextBox HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"321,34,0,0\" TextWrapping=\"Wrap\" Text=\"TextBox\" VerticalAlignment=\"Top\" Width=\"120\"/>
<Label Content=\"Password\" HorizontalAlignment=\"Left\" Margin=\"464,32,0,0\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"9.333,-7.087\"/>
<Button Content=\"Connect\" HorizontalAlignment=\"Left\" Margin=\"693,34,0,0\" VerticalAlignment=\"Top\" Width=\"75\"/>
<GroupBox Header=\"Filter Options\" HorizontalAlignment=\"Left\" Margin=\"10,75,0,0\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"0.123,0.158\" Width=\"782\" Height=\"140\" FontWeight=\"Bold\"/>
<ComboBox HorizontalAlignment=\"Left\" Margin=\"94,95,0,0\" VerticalAlignment=\"Top\" Width=\"149\"/>
<ComboBox HorizontalAlignment=\"Left\" Margin=\"94,120,0,0\" VerticalAlignment=\"Top\" Width=\"149\"/>
<ComboBox HorizontalAlignment=\"Left\" Margin=\"94,144,0,0\" VerticalAlignment=\"Top\" Width=\"149\"/>
<ComboBox HorizontalAlignment=\"Left\" Margin=\"354,96,0,0\" VerticalAlignment=\"Top\" Width=\"149\"/>
<ComboBox HorizontalAlignment=\"Left\" Margin=\"354,120,0,0\" VerticalAlignment=\"Top\" Width=\"149\"/>
<ComboBox HorizontalAlignment=\"Left\" Margin=\"354,144,0,0\" VerticalAlignment=\"Top\" Width=\"149\"/>
<ComboBox HorizontalAlignment=\"Left\" Margin=\"595,96,0,0\" VerticalAlignment=\"Top\" Width=\"149\"/>
<ComboBox HorizontalAlignment=\"Left\" Margin=\"595,120,0,0\" VerticalAlignment=\"Top\" Width=\"149\"/>
<Button Content=\"Search\" HorizontalAlignment=\"Left\" Margin=\"295,184,0,0\" VerticalAlignment=\"Top\" Width=\"75\"/>
<Button Content=\"Reset\" HorizontalAlignment=\"Left\" Margin=\"383,184,0,0\" VerticalAlignment=\"Top\" Width=\"75\"/>
<Label Content=\"Language\" HorizontalAlignment=\"Left\" Margin=\"29,96,0,0\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"1.167,0.609\" Width=\"60\"/>
<Label Content=\"Version\" HorizontalAlignment=\"Left\" Margin=\"29,120,0,0\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"1.167,0.609\" Width=\"60\"/>
<Label Content=\"Edition\" HorizontalAlignment=\"Left\" Margin=\"29,144,0,0\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"1.167,0.609\" Width=\"60\"/>
<Label Content=\"Status
\" HorizontalAlignment=\"Left\" Margin=\"278,96,0,0\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"1.167,0.609\" Width=\"60\"/>
<Label Content=\"Architecture\" HorizontalAlignment=\"Left\" Margin=\"278,121,0,0\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"1.167,0.609\" Width=\"70\"/>
<Label Content=\"Type
\" HorizontalAlignment=\"Left\" Margin=\"278,144,0,0\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"1.167,0.609\" Width=\"60\"/>
<Label Content=\"Number\" HorizontalAlignment=\"Left\" Margin=\"530,120,0,0\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"1.167,0.609\" Width=\"60\"/>
<Label Content=\"Template\" HorizontalAlignment=\"Left\" Margin=\"530,96,0,0\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"1.167,0.609\" Width=\"60\"/>
<PasswordBox HorizontalAlignment=\"Left\" Margin=\"530,38,0,0\" VerticalAlignment=\"Top\" Width=\"119\"/>
<GroupBox Header=\"Results\" HorizontalAlignment=\"Left\" Margin=\"10,220,0,0\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"-4.046,-3.263\" Height=\"367\" Width=\"360\" FontWeight=\"Bold\">
<ListBox HorizontalAlignment=\"Left\" Height=\"335\" VerticalAlignment=\"Top\" Width=\"233\" Margin=\"4,6,0,0\"/>
</GroupBox>
<Button Content=\"Select All\" HorizontalAlignment=\"Left\" Margin=\"273,252,0,0\" VerticalAlignment=\"Top\" Width=\"75\"/>
<Button Content=\"Unselect All\" HorizontalAlignment=\"Left\" Margin=\"273,276,0,0\" VerticalAlignment=\"Top\" Width=\"75\"/>
<Button Content=\"Clear\" HorizontalAlignment=\"Left\" Margin=\"273,510,0,0\" VerticalAlignment=\"Top\" Width=\"75\"/>
<Label Content=\"Hostname
\" HorizontalAlignment=\"Left\" Margin=\"29,34,0,0\" VerticalAlignment=\"Top\" RenderTransformOrigin=\"-15.222,-12.913\"/>
<GroupBox Header=\"Actions Options\" HorizontalAlignment=\"Left\" Margin=\"375,220,0,0\" VerticalAlignment=\"Top\" Width=\"417\" Height=\"52\" Focusable=\"True\" FontWeight=\"Bold\">
<CheckBox Content=\"Run Async\" HorizontalAlignment=\"Left\" Height=\"18\" VerticalAlignment=\"Top\" Width=\"101\" Margin=\"10,10,0,0\" FontWeight=\"Normal\"/>
</GroupBox>
<GroupBox Header=\"Windows Update\" HorizontalAlignment=\"Left\" Margin=\"376,277,0,0\" VerticalAlignment=\"Top\" Width=\"416\" Height=\"56\" FontWeight=\"Bold\"/>
<Label Content=\"WSUS Server\" HorizontalAlignment=\"Left\" Margin=\"383,297,0,0\" VerticalAlignment=\"Top\"/>
<TextBox HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"470,299,0,0\" TextWrapping=\"Wrap\" Text=\"TextBox\" VerticalAlignment=\"Top\" Width=\"179\"/>
<GroupBox Header=\"Status Changes\" HorizontalAlignment=\"Left\" Margin=\"376,338,0,0\" VerticalAlignment=\"Top\" Width=\"416\" Height=\"55\" FontWeight=\"Bold\">
<Label Content=\"Status\" HorizontalAlignment=\"Left\" VerticalAlignment=\"Top\" Margin=\"0,7,0,0\" FontWeight=\"Normal\"/>
</GroupBox>
<ComboBox HorizontalAlignment=\"Left\" Margin=\"470,361,0,0\" VerticalAlignment=\"Top\" Width=\"179\"/>
<Button Content=\"Update\" HorizontalAlignment=\"Left\" Margin=\"693,300,0,0\" VerticalAlignment=\"Top\" Width=\"75\"/>
<Button Content=\"Update\" HorizontalAlignment=\"Left\" Margin=\"693,360,0,0\" VerticalAlignment=\"Top\" Width=\"75\"/>
<GroupBox Header=\"Uploads & Downloads\" HorizontalAlignment=\"Left\" Margin=\"376,398,0,0\" VerticalAlignment=\"Top\" Width=\"416\" Height=\"132\" FontWeight=\"Bold\"/>
<Label Content=\"Source
\" HorizontalAlignment=\"Left\" Margin=\"383,415,0,0\" VerticalAlignment=\"Top\"/>
<TextBox HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"470,417,0,0\" TextWrapping=\"Wrap\" Text=\"TextBox\" VerticalAlignment=\"Top\" Width=\"274\"/>
<Label Content=\"Destination

\" HorizontalAlignment=\"Left\" Margin=\"383,441,0,0\" VerticalAlignment=\"Top\" Height=\"25\"/>
<TextBox HorizontalAlignment=\"Left\" Height=\"23\" Margin=\"470,443,0,0\" TextWrapping=\"Wrap\" Text=\"TextBox\" VerticalAlignment=\"Top\" Width=\"274\"/>
<Label Content=\"Method\" HorizontalAlignment=\"Left\" Margin=\"384,471,0,0\" VerticalAlignment=\"Top\"/>
<ComboBox HorizontalAlignment=\"Left\" Margin=\"470,473,0,0\" VerticalAlignment=\"Top\" Width=\"120\"/>
<Button Content=\"Execute\" HorizontalAlignment=\"Left\" Margin=\"693,493,0,0\" VerticalAlignment=\"Top\" Width=\"75\"/>

</Grid>
</Window>
\"@

$reader=(New-Object System.Xml.XmlNodeReader $xaml)
$Hash.Window=[Windows.Markup.XamlReader]::Load( $reader )
$Hash.TextBox = $Hash.window.FindName(\"TextBox\"«»)
$Hash.Window.ShowDialog() | Out-Null
$Hash.Error = $Error
})
$psCmd.Runspace = $Runspace
$data = $psCmd.BeginInvoke()[/code:1]

L'interface se lance bien dans un runspace, j'arrive à y accéder facilement grâce à mon hashtable $hash.<le_nom_du_controle> (j'ai pour l'instant uniquement définit window et TextBox).

La modification de valeur (background/contenu/etc) fonctionne correctement, par contre quand je veux aller lire simplement du text dans TextBox. Impossible.

[code:1]$Hash.TextBox[/code:1]

TextWrapping :
MinLines :
MaxLines :
Text :
CharacterCasing :
MaxLength :
TextAlignment :
SelectedText :
SelectionLength : 0
SelectionStart : 4
CaretIndex : 4
LineCount : 1


Mais ce qui est bizarre, c'est qu'en selectionnant le contenu de ce controle j'arrive à récupérer la valeur.

[/quote]
TextWrapping :
MinLines :
MaxLines :
Text :
CharacterCasing :
MaxLength :
TextAlignment :
SelectedText : test
SelectionLength : 4
SelectionStart : 0
CaretIndex : 0
LineCount : 1
[/quote]

Si quelqu'un a une idée.. je suis preneur. Pourquoi quand il est selectionné il apparait bien, et pas quand il est juste du \"text\".

Merci d'avance

@+<br><br>Message édité par: benduru, à: 6/06/13 11:48

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

Plus d'informations
il y a 12 ans 9 mois #15080 par Laurent Dardenne
Salut,
je rencontre a deux pb dans le code XAML, en tout cas en V2:
[code:1]
&lt;Button Content=\&quot;Update\&quot; HorizontalAlignment=\&quot;Left\&quot; Margin=\&quot;693,300,0,0\&quot; VerticalAlignment=\&quot;Top\&quot; Width=\&quot;75\&quot;/&gt;

&lt;Button Content=\&quot;Update\&quot; HorizontalAlignment=\&quot;Left\&quot; Margin=\&quot;693,360,0,0\&quot; VerticalAlignment=\&quot;Top\&quot; Width=\&quot;75\&quot;/&gt;

&lt;GroupBox Header=\&quot;Uploads &amp; Downloads\&quot; HorizontalAlignment=\&quot;Left\&quot; Margin=\&quot;376,398,0,0\&quot; VerticalAlignment=\&quot;Top\&quot; Width=\&quot;416\&quot; Height=\&quot;132\&quot; FontWeight=\&quot;Bold\&quot;/&gt;
[/code:1]
Une définition est dupliquée et le '&amp;' pose pb.

J'ai trouvé ceci :
learn-powershell.net/2012/10/14/powershe...-different-runspace/

Je ne sais si cela t'aidera.
Vérifie si cette construction fonctionne sans utiliser WPF.

Tutoriels PowerShell

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

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