我正尝试在PowerShell中创建进度条,我希望进度条在一定时间后达到100%。下面的脚本可以做到这一点,但我必须单击按钮才能启动它。有没有办法不需要点击按钮就可以立即启动进度条?仅供参考:我只是想创建一个进度条,在设定的时间后将达到100%。以下是我的剧本:
Function StartProgressBar
{
if($i -le 5){
$pbrTest.Value = $i
$script:i += 1
}
else {
$timer.enabled = $false
}
}
$Form = New-Object System.Windows.Forms.Form
$Form.width = 400
$Form.height = 200
$Form.Text = "Add Resource"
# Init ProgressBar
$pbrTest = New-Object System.Windows.Forms.ProgressBar
$pbrTest.Maximum = 100
$pbrTest.Minimum = 0
$pbrTest.Location = new-object System.Drawing.Size(10,10)
$pbrTest.size = new-object System.Drawing.Size(100,50)
$i = 0
$Form.Controls.Add($pbrTest)
# Button
$btnConfirm = new-object System.Windows.Forms.Button
$btnConfirm.Location = new-object System.Drawing.Size(120,10)
$btnConfirm.Size = new-object System.Drawing.Size(100,30)
$btnConfirm.Text = "Start Progress"
$Form.Controls.Add($btnConfirm)
$timer = New-Object System.Windows.Forms.Timer
$timer.Interval = 1000
$timer.add_Tick({
StartProgressBar
})
$timer.Enabled = $true
$timer.Start()
# Button Click Event to Run ProgressBar
$btnConfirm.Add_Click({
While ($i -le 100) {
$pbrTest.Value = $i
Start-Sleep -m 1
"VALLUE EQ"
$i
$i += 1
}
})
# Show Form
$Form.Add_Shown({$Form.Activate()})
$Form.ShowDialog() ```
2条答案
按热度按时间aoyhnmkz1#
我对您的代码做了一些调整。
StartProgressBar
重命名为Update-ProgressBar
,因为它将在每个计时器节拍上被调用以更新状态栏,所以我认为这个名称更不言自明$i
,因为ProgressBar对象本身具有跟踪其当前值所需的所有属性。此外,如果您确实需要在函数(和其他脚本块)中使用计数器,则需要使用$script:i
对其进行寻址。没有该脚本作用域,$i就不存在。$Form.Add_Shown({$timer.Enabled = $true; $timer.Start()})
启用和启动计时器$Form.Topmost = $true
代码如下:
vnzz0bqm2#
我认为如果您删除onClick事件,它将自动运行,但我不知道这是否明显。