Powershell как остановить прогрессбар - PullRequest
0 голосов
/ 17 ноября 2018

Я пытаюсь прочитать данные из массива и отобразить индикатор выполнения.
Моя цель - остановить цикл и прогрессбар, и для этого я сделал это так.

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

 }

Я не понимаю, где я не прав.
Как я мог это сделать?
Спасибо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...