Если вы не создадите отдельный поток, я настоятельно рекомендую не использовать Start-Sleep
командлет в Windows Forms или Windows Presentation Foundation , поскольку это, очевидно, будетостановите интерфейс пользователя.
Вместо этого я бы рекомендовал использовать событие (Windows.Forms.Timer
).
Для этого я написал небольшую функцию для задержки команды:
Команда задержки
Function Delay-Command([ScriptBlock]$Command, [Int]$Interval = 100, [String]$Id = "$Command") {
If ($Timers -isnot "HashTable") {$Global:Timers = @{}}
$Timer = $Timers[$Id]
If (!$Timer) {
$Timer = New-Object Windows.Forms.Timer
$Timer.Add_Tick({$This.Stop()})
$Timer.Add_Tick($Command)
$Global:Timers[$Id] = $Timer
}
$Timer.Stop()
$Timer.Interval = $Interval
If ($Interval -gt 0) {$Timer.Start()}
}; Set-Alias Delay Delay-Command
Пример
Delay {$WpFOutputBox.Text = ''} 60000
Параметры
-Command
Командас задержкой.
-Interval
Время ожидания перед выполнением command
.
Если -Interval
установлено на 0
или меньше,command
(с соответствующим Id
) будет сброшено.
По умолчанию установлено значение 100
(незначительный промежуток времени, чтобы другие события могли начать).
-Id
Id
отложенной команды.Несколько команд, которые могут выполнять различные Id
одновременно.Если тот же Id
используется для команды, которая еще не выполнена, интервальный таймер будет сброшен (или отменен, если установлено значение 0
).
Значение по умолчанию Id
в командной строке.