Как уже указывалось, принудительное синхронное ожидание с Start-Sleep
блокирует поток пользовательского интерфейса в целом и делает вашу форму не отвечающей .
Вместо использования Start-Sleep
, пусть таймер периодически вызывает вашу функцию , раз в секунду;Затем вам нужно отслеживать свое состояние с помощью переменной уровня сценария:
$script:x = 600
Function StartProgress {
$length = $script:x / 100
$min = [int](([string]($script:x / 60)).split('.')[0])
$lblCnt.Text = " " + $min + " minutes " + ($script:x % 60) + " seconds left"
$pbrCnt.Value = $pbrCnt.Maximum - $script:x
if (--$script:x -eq 0) { $timer.Dispose() }
}
$timer.Interval = 1000 # 1 sec.
$timer.add_Tick({StartProgress})
$timer.Start()
Обратите внимание, как .Dispose()
вызывается на $timer
, когда $script:x
достигает 0
, чтобы предотвратить дальнейшие события отполучать генерируемый;если обработка останавливается раньше, вы должны вызвать $timer.Dispose()
вручную.