Я пытаюсь прочитать данные из массива и отобразить индикатор выполнения.
Моя цель - остановить цикл и прогрессбар, и для этого я сделал это так.
function ButtonStart_Click {
$LabelCounter.visible = $true
$ProgressBar1.Visible = $true
$ButtonStart.Enabled = $false
$ButtonStop.Enabled = $true
$script:CancelLoop = $false
# =============================================================
# LOOP EXCEL DATA OBJECT
# =============================================================
$Counter = 0
$ErrorCounter = 0;
foreach ($Row in $ExcelData) {
if($script:CancelLoop -eq $true){
$progressbar1.Value = 0
break;
}
$Counter++
[Int]$Percentage = ($Counter/$ExcelData.Count)*100
$ProgressBar1.Value = $Percentage
$LabelCounter.Text = "Show $Counter of " +$ExcelData.Count
[System.Windows.Forms.Application]::DoEvents()
Start-Sleep -Milliseconds 900
}
$ButtonStop.Enabled = $false
}
function ButtonStop_Click {
$ProgressBar1.Value = 0
$script:CancelLoop = $true
}
К сожалению, это не работает, потому что после запуска цикла я пытаюсь нажать кнопку остановки (даже если она включена), пока ничего не закончится до конца цикла.
В прошлом я использовал do-till для запуска-остановки прогресс-бара, но без чтения массива, и он работал хорошо.
function ButtonStart_Click {
$LabelCounter.visible = $true
$ProgressBar1.Visible = $true
$TextBoxSubject.ReadOnly = $true
$Progressbar1.Maximum = 100
$script:CancelLoop = $false
$ButtonStop.Enabled = $true
$this.Enabled = $false
$Progressbar1.Value = 0
do{
if($script:CancelLoop -eq $true){
$progressbar1.Value = 0
break;
}
$Progressbar1.PerformStep()
[System.Windows.Forms.Application]::DoEvents()
sleep -Milliseconds 900
}
until($Progressbar1.Value -eq $Progressbar1.Maximum)
$this.Enabled = $true
$ButtonStop.Enabled = $false
}
Я не понимаю, где я не прав.
Как я мог это сделать?
Спасибо