У меня есть командлет PowerShell , написанный на C # (производный от PSCmdlet
), который запускает длительную задачу, которая должна обновлять свой прогресс, используя WriteProgress()
во время выполнения. Поскольку PowerShell не позволяет отдельному потоку использовать WriteObject
или WriteProgress
, мне пришлось создать Queue<object>
в основном потоке, и я добавляю элементы в очередь из задачи, которую я хочу записать в конвейер / прогресс. Цикл while удаляет объекты из очереди по мере их поступления и записывает в конвейерную линию / индикатор выполнения.
Это работает, но я хотел посмотреть, есть ли какие-нибудь лучшие практики для многопоточности с помощью командлета PowerShell, написанного на C # / VB. Например, с WPF я всегда могу перейти в поток пользовательского интерфейса с помощью UIComponent.Dispatcher.Invoke()
, если мне нужно обновить индикатор выполнения или компонент пользовательского интерфейса. Есть ли что-нибудь эквивалентное, что я могу использовать для «перехода» в поток PowerShell для обновления пользовательского интерфейса или записи в конвейер?