У меня есть скрипт на основе форм, который делает много копий файлов из разных источников.Основной цикл копирования файлов может продолжаться долго, и я хотел бы добавить кнопку паузы для приостановки обработки (пока кнопка паузы не будет нажата снова)
Следуя совету здесь , Я использую [System.Windows.Forms.Application]::DoEvents()
, чтобы сохранить отзывчивость формы и предоставить способ корректно разорвать цикл копирования.
Я изо всех сил пытаюсь понять, как я могу ввести кнопку для приостановки "Цикл ForEach "вместо того, чтобы его нарушать - кто-нибудь может направить меня в правильном направлении, так как мои попытки использовать Do-Before / While, похоже, каким-то образом приводят к зависанию сценария?
Чрезвычайно упрощенный пример того, что яделать это ниже:
$StartCopyButton.Add_Click({
$script:CancelLoop = $false
$script:PauseToggle = $false
$CancelButton.Enabled = $true
$StartCopyButton.Enabled = $false
Get-ChildItem -LiteralPath $Source -Recurse -File | ForEach {
Copy-Item -Path $.FullName -Destination $NewDestination
[System.Windows.Forms.Application]::DoEvents()
If($script:CancelLoop -eq $true) {
#Exit the loop
Break;
}
If ($script:PauseToggle) {
Do {
[System.Windows.Forms.Application]::DoEvents()
} Until (!$script:PauseToggle)
}
}
$CancelButton.Enabled = $false
$StartCopyButton.Enabled = $true
})
$CancelButton.Add_Click({
$script:CancelLoop = $true
})
$PauseButton.Add_Click({
# Boolean change value to true/false
$script:PauseToggle = !$script:PauseToggle
})