Я пытаюсь добавить индикатор прогресса в форму в powershell. Я не хочу использовать командлет PowerShell Write-Progress (потому что, когда я запускаю скрипт из командной строки, он показывает текстовый индикатор выполнения, и мне всегда нужна форма / графическая панель).
Я пробовал это, и, кажется, работает (найдено в Интернете):
[reflection.assembly]::loadwithpartialname("System.Windows.Forms") | Out-Null
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
$form_main = New-Object System.Windows.Forms.Form
$progressBar1 = New-Object System.Windows.Forms.ProgressBar
$timer1 = New-Object System.Windows.Forms.Timer
$timer1_OnTick = {
$progressBar1.PerformStep()
}
$form_main.Text = 'ProgressBar demo'
$progressBar1.DataBindings.DefaultDataSourceUpdateMode = 0
$progressBar1.Step = 1
$progressBar1.Name = 'progressBar1'
$form_main.Controls.Add($progressBar1)
$timer1.Interval = 100
$timer1.add_tick($timer1_OnTick)
$timer1.Start()
$form_main.ShowDialog()| Out-Null
Однако я не хочу, чтобы событие обновляло индикатор выполнения (как это делает $ timer1_OnTic в приведенном выше примере), я хочу обновить его сам, совершая вызовы по всему сценарию, такие как:
$progressBar1.PerformStep()
Или
$progressBar1.Value = 10
Так что, похоже, мне нужен какой-то фоновый рабочий, который обновляет индикатор выполнения всякий раз, когда я выполняю вызовы PerformStep () или изменяю значение progressBar
Вызов ShowDialog останавливает всю обработку внутри скрипта, пока форма не будет закрыта.