Как работать с таймером с графическим интерфейсом с помощью powershell? - PullRequest
0 голосов
/ 21 июня 2019

У меня есть скрипт cmd. Я хочу использовать таймер на 10 секунд, чтобы принять решение продолжить процесс сценария cmd или приостановить его. Я хочу поместить этот скрипт в первую строку моего cmd-скрипта

powershell.exe -ExecutionPolicy Bypass -File %~dp0\Pause_GUI.ps1

Появится 10-секундный обратный отсчет, через 10 с он продолжит процесс сценария cmd, вернув уровень ошибки, но если мы нажмем кнопку пауза, сценарий cmd будет приостановлен, в том числе и уровень ошибки. Любой может помочь, пожалуйста

ОБНОВЛЕНО

#------------------------------------------- Add in Forms Controls -------------------------------------------#
Add-Type -AssemblyName System.Windows.Forms
#-------------------------------------------------------------------------------------------------------------#


#---------------------------------------- Begins creation of the form ----------------------------------------#
$MainForm = New-Object System.Windows.Forms.Form
$MainForm.Text = "Message"
$MainForm.Width = 500
$MainForm.Height = 200
$MainForm.StartPosition = "CenterScreen"
$MainForm.BackColor = "#e2e2e2"
#-------------------------------------------------------------------------------------------------------------#


#----------------------------------------------- Button Clicks -----------------------------------------------#
$Auto_Button = ({ $global:result=1
                  $MainForm.Close() })
$Manual_Button = ({ $global:result=0
                    $MainForm.Close() })
#-------------------------------------------------------------------------------------------------------------#

#-------------------------------------------------- Buttons --------------------------------------------------#
$Automatic = New-Object System.Windows.Forms.Button
$Automatic.Location = New-Object System.Drawing.Size(110,80)
$Automatic.Size = New-Object System.Drawing.Size(120,30)
$Automatic.Text = "Continue After 10s"
$Automatic.BackColor = "#e47104"
$Automatic.Add_Click($Auto_Button)
$MainForm.Controls.Add($Automatic)

$Manual = New-Object System.Windows.Forms.Button
$Manual.Location = New-Object System.Drawing.Size(270,80)
$Manual.Size = New-Object System.Drawing.Size(100,30)
$Manual.Text = "Pause"
$Manual.BackColor = "#e47104"
$Manual.Add_Click($Manual_Button)
$MainForm.Controls.Add($Manual)
#-------------------------------------------------------------------------------------------------------------#

#--------------------------------------------- Displays the Form ---------------------------------------------#
$result=0
$MainForm.ShowDialog()
exit $result
#-------------------------------------------------------------------------------------------------------------#

Как обращаться с кнопкой «Продолжить через 10 с» в качестве таймера? И графический интерфейс закроется автоматически через 10 с

1 Ответ

1 голос
/ 21 июня 2019

Вам нужен System.Windows.Forms.Timer -объект, который считает ваше время, и .tick -эвент, который сработает, когда придет время.Однако вам нужно остановить (и утилизировать) таймер, иначе он продолжит запускать событие, даже когда окно закрыто.(В Powershell ISE это может привести к закрытию окон, как только вы их загрузите).Чтобы захватить таймер из своего собственного события, вам нужно указать его в нужной области.Для этого я использовал global -обзор.

$Auto_Button = ({ 
                    $global:Counter = 0
                    $global:timer = New-Object -type System.Windows.Forms.Timer
                    $global:timer.Interval = 1000
                    $global:timer.add_Tick({
                        if ($Counter -eq 10){
                            write-host $global:counter
                            $global:timer.Stop()
                            $global:timer.Dispose()
                            $result=1
                            $MainForm.Close()                    
                            $global:Counter++
                        }else{
                            write-host $global:counter
                            $global:Counter++
                        }
                    })
                    $global:timer.Start()
               })
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...