Vb.net 检索数据时显示“加载表单”

Vb.net 检索数据时显示“加载表单”,vb.net,winforms,backgroundworker,loading,Vb.net,Winforms,Backgroundworker,Loading,我有一个大型应用程序,我想在其中实现一个加载屏幕。每次用户请求大量数据时,都会弹出此对话框。当数据库检索数据时,用户看到一个小表单,其中包含文本Please wait和类似gif progressbar的内容 我遇到的问题是,我使用backgroundworker在第二个线程中启动此表单。这很好,我看到它弹出,但加载完成后它不会关闭。我使用了microsoft MSDN提供的代码。这是我现在掌握的代码,但收尾从未发生过。我调试了代码,发现bgw.cancellationpending永远不会为t

我有一个大型应用程序,我想在其中实现一个加载屏幕。每次用户请求大量数据时,都会弹出此对话框。当数据库检索数据时,用户看到一个小表单,其中包含文本Please wait和类似gif progressbar的内容

我遇到的问题是,我使用backgroundworker在第二个线程中启动此表单。这很好,我看到它弹出,但加载完成后它不会关闭。我使用了microsoft MSDN提供的代码。这是我现在掌握的代码,但收尾从未发生过。我调试了代码,发现bgw.cancellationpending永远不会为true,即使我调用了CancelAsync方法

showLoading在数据库调用之前调用,cancelLoading在数据库调用完成之后调用

什么是错误的,我应该改变什么

我的代码:

Private bgw As New BackgroundWorker

Public Sub showLoading()
    bgw.WorkerSupportsCancellation = True

    AddHandler bgw.DoWork, AddressOf bgw_doWork
    AddHandler bgw.RunWorkerCompleted, AddressOf bgw_Complete

    If Not bgw.IsBusy = True Then
        bgw.RunWorkerAsync()
    End If
End Sub

Public Sub closeLoading()
    If bgw.WorkerSupportsCancellation = True Then
        bgw.CancelAsync()
    End If
End Sub

Private Sub bgw_doWork(ByVal sender As Object, ByVal e As DoWorkEventArgs)
    Dim worker As BackgroundWorker = CType(sender, BackgroundWorker)
    Dim loadingScreen As New frmLoading

    loadingScreen.ShowDialog()

    While True
        If Not bgw.CancellationPending Then
            Threading.Thread.Sleep(50)
        Else
            e.Cancel = True
            Exit While
        End If
    End While
End Sub

Private Sub bgw_Complete(ByVal sender As Object, ByVal e As RunWorkerCompletedEventArgs)
    Dim lstFrm As New List(Of frmLoading)
    lstFrm = Application.OpenForms.OfType(Of frmLoading)()

    If lstFrm.Count > 0 Then
        For Each frm As frmLoading In lstFrm
            frm.Close()
        Next
    End If
End Sub
您的问题似乎是加载Screen.ShowDialog

只要对话框保持打开状态,使用loadingScreen.Show as.ShowDialog就会阻止执行