none
Powershell ISE Crashes (Winforms-GUI) - gelöst RRS feed

  • Frage

  • Hi,

    nachdem hier öfter Threads offen waren, wobei es darum ging, dass die ISE einfriert wenn man mit Forms arbeitet und niemand half, möchte ich Lösungen präsentieren.

    Eine Lösung ist:

    nicht  "$form.showDialog()" zu benutzen, sondern [system.windows.forms.application]::run($form)

    eine andere Lösung ist die Form in einem eigenen Thread zu starten:

    $code =

    {

          ..your form code...

          $result = $form.ShowDialog()

    }

    $newThread = [Powershell]::Create()

    $newThread.AddScript($code)

    $handle = $newThread.BeginInvoke()

    !!Falls man Variablen im neuen Dialog benötigt, die aus dem aufrufenden Script kommen einfach:!!

    $newThread.Runspace.SessionStateProxy.SetVariable("variablenname",value)

    vor dem starten des Threads...

    beides funktioniert perfekt, ich benutze mehrere selbst programmierte Tools in der ISE die Forms nutzen.

    Übrigens handelt es sich hierbei nicht um einen Bug wie so oft behauptet, sondern ein zu erwartendes Verhalten. Forms benötigen (STA) , die ISE läuft(MTA), wenn nun die Forms mit showDialog()  aufgerufen werden ist ihr Parent die ISE(MTA). 

    Beste Grüße



    Donnerstag, 16. November 2017 07:46