VB.Net:将同步例程转换为异步运行

问题描述

在我们部署到多个客户端的生产软件中,我们使用 System.Data.Common 模块来处理应用程序和异地数据库间的通信。数据库很大而且并不总是很快,这导致应用程序在复杂的 SELECT 语句期间冻结。

我如何重构这样的代码以在后台工作,以便主程序线程在等待数据库检索数据时不会冻结?

Class UserDashboard

    Private Sub LoadButton_Click(sender As Object,e As RoutedEventArgs) Handles LoadButton.Click
        LoadRecords()
    End Sub

    Public Sub LoadRecords()
        AllUsers.Clear()
        UserView.ItemsSource = AllUsers

        Using UsersDS As New DataSet
            Using UsersDA As New sqlDataAdapter With {'REDACTED sqlDA arguments'}
                UsersDA.Fill(UsersDS,"Users")
                Using UsersDV As New DataView(UsersDS.Tables("Users"))
                    For Each UserDRV As DaTarowView In UsersDV
                        AllUsers.Add(ParseUserDRV(UserDRV))
                    Next
                End Using
            End Using
        End Using
    End Sub

    Private Function ParseUserDRV(ByVal UserDRV As DaTarowView) As User
        Dim ThisUser As New User
        ThisUser.ID = UserDRV.Item("ID")

        ' REDACTED code for setting ThisUser properties

        'Get Subordinates
        Using DS1 As New DataSet
            Using DA1 As New sqlDataAdapter With {'REDACTED sqlDA arguments'}
                DA1.Fill(DS1,"Users")
                Using DV1 As New DataView(DS1.Tables("Users"))
                    For Each SODRV As DaTarowView In DV1
                        ThisUser.Subordinates.Add(ParseDRV(SODRV))
                    Next
                End Using
            End Using
        End Using
        Return ThisUser
    End Function

' REDACTED other functionality for the form '

End Class

我在此处编辑了一些代码以简化/匿名化内容,但如果您需要更多上下文,请告诉我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)