【问题标题】:Show "loading form" while retrieving data检索数据时显示“加载表单”
【发布时间】:2014-10-16 19:52:12
【问题描述】:

我有一个大型应用程序,我想在其中实现加载屏幕。每次用户请求大量数据时都会弹出此消息。当数据库检索数据时,用户会看到一个带有文本“请稍候”的小表单和一个类似 gif 进度条的东西。

我遇到的问题是我使用后台工作程序在第二个线程中启动此表单。这很好,我看到它弹出,但是加载完成后它并没有关闭。我使用了微软 MSDN 提供的代码。这是我现在拥有的代码,但关闭永远不会发生。我调试了代码,发现 bgw.cancellationpending 永远不会为真,即使我调用了 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

【问题讨论】:

    标签: vb.net winforms backgroundworker loading


    【解决方案1】:

    您的问题似乎是 loadingScreen.ShowDialog()

    使用 loadingScreen.Show() 因为 .ShowDialog() 会阻止执行,只要 Dialog 保持打开状态。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-30
      • 2019-06-01
      相关资源
      最近更新 更多