运行时进度条增量

问题描述 投票:0回答:1

我在 Visual Studio 中创建了一个程序,其中包含程序列表和每个程序的复选框。您选择所需的程序,单击按钮,然后它就会静默安装,无需用户交互。我正在尝试为此添加一个进度条,但似乎无法使其正常工作。

我的进度条是在form_load期间设置的

    ProgressBar1.Minimum = 0
    ProgressBar1.Value = 0
    ProgressBar1.Step = 1

我从 if...then 语句开始来查找哪些被检查...

    If Chk_VC.Checked Then Install_VC()          'Visual C++ Redistributable 
    If Chk_dotnet.Checked Then Install_dotnet()     'Microsoft .Net Desktop Runtime

然后运行功能来安装特定程序...

Function Install_VC()   'Visual C++ 2015-2022
    arg.FileName = "...installs\Microsoft\Framework\VC_redist_2015-2022_14.38.33130_x64.exe"
    arg.Arguments = "/install /passive /norestart"
    Process.Start(arg).WaitForExit()
    Return True
End Function

Function Install_dotnet()
    arg.FileName = "...\installs\Microsoft\Framework\Microsoft .Net Desktop Runtime\windowsdesktop-runtime-6.0.25-win-x64.exe"
    arg.Arguments = "/install /passive /norestart"
    Process.Start(arg).WaitForExit()
    Return True
End Function

现在我已经尝试了 ProgressBar1.PerformStep()ProgressBar1.Increment(1) ,并在 Button_click 和各个函数中进行了变化。进度条仅在一切运行完成后才会进度。

所以我想我可以尝试使用 ProgressBar1.Refresh()Application.DoEvents() 刷新进度条或表单本身,但仍然无法正常显示。

任何帮助将不胜感激!谢谢你。

vb.net progress-bar
1个回答
0
投票

尝试在不同的线程上调用

WaitForExit()
,这样它就不会阻塞您的主 UI...

类似:

Sub Install_VC()   'Visual C++ 2015-2022
    arg.FileName = "...installs\Microsoft\Framework\VC_redist_2015-2022_14.38.33130_x64.exe"
    arg.Arguments = "/install /passive /norestart"
    Dim x = WaitForProcess(arg)
End Sub
Sub Install_dotnet()
    arg.FileName = "...\installs\Microsoft\Framework\Microsoft .Net Desktop Runtime\windowsdesktop-runtime-6.0.25-win-x64.exe"
    arg.Arguments = "/install /passive /norestart"
    Dim x = WaitForProcess(arg)
End Sub

Private Async Function WaitForProcess(ByVal args As ProcessStartInfo) As Task
    Await Task.Run(Sub()
                       Process.Start(args).WaitForExit()
                   End Sub)
    ProgressBar1.PerformStep()
End Function
© www.soinside.com 2019 - 2024. All rights reserved.