PowerShell实现带计时器的自动启动进度条问题求助
实现自动启动的PowerShell进度条
要让进度条在表单显示后自动启动,无需点击按钮,同时保证进度条在设定时间内平稳达到100%,可以通过以下修改实现:
修改后的完整脚本
# 进度条更新函数 Function UpdateProgressBar { if ($script:currentProgress -le 100) { $pbrTest.Value = $script:currentProgress $script:currentProgress += $progressIncrement } else { $timer.Enabled = $false } } # 创建表单 $Form = New-Object System.Windows.Forms.Form $Form.Width = 400 $Form.Height = 200 $Form.Text = "Add Resource" # 初始化进度条 $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(360, 30) # 加宽进度条更直观 $script:currentProgress = 0 $Form.Controls.Add($pbrTest) # 配置定时器:设定总时长(秒)和间隔(毫秒) $totalDuration = 10 # 进度条从0到100%的总时间,单位:秒 $timerInterval = 100 # 定时器触发间隔,单位:毫秒 $progressIncrement = 100 / ($totalDuration * (1000 / $timerInterval)) # 每次tick的进度增量 $timer = New-Object System.Windows.Forms.Timer $timer.Interval = $timerInterval $timer.add_Tick({ UpdateProgressBar }) # 表单显示时自动启动定时器 $Form.Add_Shown({ $Form.Activate() $timer.Start() # 显示表单后立即启动进度更新 }) # 显示表单 $Form.ShowDialog()
关键修改说明
- 移除按钮依赖:删除原脚本中按钮及点击事件代码,不再需要手动触发
- 进度逻辑优化:通过
totalDuration设置进度条完成的总时间,自动计算每次定时器触发的进度增量,确保平稳推进到100% - 自动启动触发:在
Form.Add_Shown事件中启动定时器,表单一显示就开始更新进度条 - 修正原函数局限:原函数仅更新到5,现在改为更新到100,满足需求
内容的提问来源于stack exchange,提问作者Ken Robertson
相关产品推荐
相关产品推荐

