首页 > 解决方案 > 安装打印机时的 VB.net 进度条

问题描述

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

 Dim objNetwork = CreateObject("WScript.Network")

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

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

提前谢谢

标签: vb.net

解决方案


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

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

我还添加了一个 COM 引用Windows Script Host Object Model,允许您放置Option Strict On和创建具有强类型的打印机。但这是可选的,但你总是可以不用。

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


推荐阅读