VB.net 安装打印机时的进度条

VB.net progress bar while installing a printer

我有一个带有一堆打印机的列表框,通过选择打印机并按安装按钮,打印机就安装好了。该过程需要 30-45 秒,应用程序冻结但它正在后台安装。无论如何要放置一个进度条来显示正在发生的事情而不是冻结。这是打印机正在安装的代码部分。不需要进度条,但任何类型的 activity 都可以显示驱动程序正在安装时发生的事情

 Dim objNetwork = CreateObject("WScript.Network")

 MsgBox("Printer Driver is Installing, Please wait",, "Installing")

 objNetwork.AddWindowsPrinterConnection("\printserver\" + CheckedListBox1.SelectedItem)
 objNetwork.SetDefaultPrinter(CheckedListBox1.SelectedItem)
 objNetwork = Nothing

提前致谢

您真的可以选择任何方式告诉用户在执行后台任务时等待。这是一个带有 ToolStripStatusLabel 和 Cursor 更新的选项。它使用 Async/Await 创建任务以不冻结您的 ui.

Option Strict On

Imports IWshRuntimeLibrary

' ---

Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try
        Me.Cursor = Cursors.WaitCursor
        Me.ToolStripStatusLabel1.Text = "Printer Driver is Installing, Please wait"
        Dim name = CheckedListBox1.SelectedItem.ToString()
        Await addPrinterAsync(name)
    Finally
        Me.Cursor = Cursors.Default
        Me.ToolStripStatusLabel1.Text = "Ready"
    End Try
End Sub

Private Function addPrinterAsync(name As String) As Task
    Return Task.Run(
        Sub()
            Dim objNetwork As New WshNetwork() '= CreateObject("WScript.Network")
            objNetwork.AddWindowsPrinterConnection($"\printserver\{name}")
            objNetwork.SetDefaultPrinter(name)
        End Sub)
End Function

我还添加了对 Windows Script Host Object Model 的 COM 引用,它允许您放置 Option Strict On 并创建具有强类型的打印机。但这是可选的,但你可以随时离开。

我只是不认为 MsgBox 会起作用,因为用户可以随时关闭它,即使您设法让它显示非模态并且不冻结 ui。