PowerShell и графический интерфейс WPF зависают

У меня есть функция PowerShell для поиска в каталоге zip-файлов, извлечения его и переименования файлов. Эта функция также изменяет элемент строки состояния, чтобы обновить файл, в котором он находится. Я заметил, что когда это запускается, графический интерфейс зависает.

Как я могу запустить функцию и обновить графический интерфейс без зависания?


person Community    schedule 04.08.2009    source источник
comment
Для фонового работника WPF см.: «записать вывод powershell, как это происходит с управлением wpf ui»> stackoverflow.com/questions/23142137/   -  person iRon    schedule 21.04.2016


Ответы (1)


Не выполняйте дорогостоящие операции в потоке пользовательского интерфейса — используйте фоновый рабочий процесс. Вот руководство: http://dotnetperls.com/backgroundworker-introduction

person Richard Berg    schedule 04.08.2009
comment
Ричард, ты пробовал? Я делал с винформс. Мне не повезло, потому что, как говорится в сообщении от 2006 года, «проблема в том, что рабочий поток не имеет пространства выполнения для запуска команды». Так, например. $w.add_DoWork({ $global:i = 1 }) не присваивает 1 глобальной переменной. Мне было бы любопытно, как назначить ему пространство для выполнения. - person stej; 26.01.2010
comment
Я имел в виду выполнение всего конвейера Powershell в фоновом потоке, а не только операцию zip. Это несколько сложно, если он пишет приложение с графическим интерфейсом исключительно в Powershell (используя WPK или что-то в этом роде), но в то время это было очень редко, и по большей части до сих пор. Я предположил, что у него было обычное приложение WPF, которое делегировало Posh определенные административные задачи. Другой вариант — использовать поток Write-Progress, встроенный в Posh v2, например. blogs.msdn.com/mediaandmicrocode/archive/ 28.12.2009/ - person Richard Berg; 26.01.2010