2 Stimmen

PowerShell und WPF GUI einfrieren

Ich habe eine PowerShell-Funktion, um in einem Verzeichnis nach Zip-Dateien zu suchen, sie zu extrahieren und die Dateien umzubenennen. Die Funktion ändert auch das Statusleisten-Element, um anzuzeigen, auf welcher Datei es sich gerade befindet. Mir ist aufgefallen, dass die GUI einfriert, wenn dies ausgeführt wird.

Wie kann ich die Funktion ausführen und die GUI aktualisieren, ohne dass sie einfriert?

0 Stimmen

Für einen WPF-Background-Arbeiter siehe: stackoverflow.com/questions/23142137/…

4voto

Richard Berg Punkte 20483

Führen Sie keine teuren Operationen auf dem UI-Thread aus - verwenden Sie einen Hintergrundarbeiter. Hier ist ein Tutorial: http://dotnetperls.com/backgroundworker-introduction

0 Stimmen

Richard, hast du es versucht? Ich habe es mit WinForms gemacht. Ich hatte kein Glück, weil, wie ein Beitrag aus 2006 sagt "Das Problem ist, dass der Worker-Thread keinen Runspace zum Ausführen des Befehls hat". Zum Beispiel weist $w.add_DoWork({ $global:i = 1 }) nicht 1 der globalen Variable zu. Ich wäre neugierig, wie man ihm einen Runspace zuweist.

0 Stimmen

Ich meinte, den gesamten Powershell-Pipeline im Hintergrundthread auszuführen, nicht nur die Zip-Operation. Dies ist etwas schwierig, wenn er eine GUI-App rein in Powershell schreibt (mit WPK oder ähnlichem), aber das war zu der Zeit sehr ungewöhnlich und ist größtenteils immer noch so. Ich nahm an, er hat eine normale WPF-App, die bestimmte admin-ähnliche Aufgaben an Posh delegiert. Die andere Option ist, den Write-Progress-Stream, der in Posh v2 integriert ist, zu verwenden, z. B. blogs.msdn.com/mediaandmicrocode/archive/2009/12/28/…

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X