⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch9_demoform003.vb

📁 文件与IO存取,数据绑定,数据库更新,章立民的程序
💻 VB
字号:
Option Strict On
Imports System.Data.SqlClient
Imports System.Threading

Public Class CH9_DemoForm003

    Private Sub btnWaitAsynch_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnWaitAsynch.Click
        Me.btnWaitAsynch.Enabled = False

        ' 利用 SqlConnectionStringBuilder 对象来构建连接字符串。
        Dim connectStringBuilder As New SqlConnectionStringBuilder()
        connectStringBuilder.DataSource = "(local)\SQLExpress"
        connectStringBuilder.InitialCatalog = "北风贸易"
        connectStringBuilder.IntegratedSecurity = True

        ' 启用异步处理。
        connectStringBuilder.AsynchronousProcessing = True

        ' 建立两个不同的 StoWatch 对象。
        Dim myWatch As New Stopwatch()
        Dim mySecondWatch As New Stopwatch()

        ' 建立两个不同的连接。
        Dim myConnection1 As SqlConnection = New SqlConnection(connectStringBuilder.ConnectionString)
        Dim myConnection2 As SqlConnection = New SqlConnection(connectStringBuilder.ConnectionString)

        ' 建立两个不同的查询字符串。
        Dim myQuery1 As String = "WAITFOR DELAY '0:0:01';" & _
          "SELECT 产品相片编号, 相片缩图, 相片全图 FROM 自行车产品相片"

        Dim myQuery2 As String = "WAITFOR DELAY '0:0:03';" & _
          "SELECT 员工号码, 姓名, 玉照 FROM 章立民研究室"

        Try

            ' 启动两个定时器。
            myWatch.Start()
            mySecondWatch.Start()

            ' 我们要替每一个查询开启一个连接并开始执行。
            ' 使用每一个 BeginExecuteReader 所返回的 IAsyncResult 对象,
            ' 我们可以分别将其 WaitHandle 新增至数组中。
            myConnection1.Open()
            Dim myCommand1 As SqlCommand = New SqlCommand(myQuery1, myConnection1)
            Dim myResult1 As IAsyncResult = myCommand1.BeginExecuteReader()
            Dim myWaitHandle1 As WaitHandle = myResult1.AsyncWaitHandle

            myConnection2.Open()
            Dim myCommand2 As SqlCommand = New SqlCommand(myQuery2, myConnection2)
            Dim myResult2 As IAsyncResult = myCommand2.BeginExecuteReader()
            Dim myWaitHandle2 As WaitHandle = myResult2.AsyncWaitHandle

            ' 将等候控制代码新增至 WaitHandle 数组中,如此一来,我们
            ' 可以在它们进入时检查所有的等候控制代码。
            Dim myWaitHandles As WaitHandle() = {myWaitHandle1, myWaitHandle2}

            Dim index As Integer
            Dim countWaits As Integer

            For countWaits = 0 To 2

                ' 现在我们要等候指定数组中有任何元素收到信号,亦即检视是否有
                ' 任何等候控制代码完成。
                index = WaitHandle.WaitAny(myWaitHandles, 5000, False)

                ' 根据所传回的处理,我们会将其数据显示在 DataGridView 控件中。
                ' 您可以在此处进行额外的处理。由于这是以异步方式发生,因此
                ' 我们并不知道何者会先完成。
                Select Case index

                    Case 0

                        Using myReader1 As SqlDataReader = myCommand1.EndExecuteReader(myResult1)
                            ' 将查询结果显示在第一个 DataGridView 控件中。
                            If myReader1.Read() Then
                                myWatch.Stop()
                                elapsedTime.Text = "第一个返回的查询结果:" & _
                                  myWatch.ElapsedMilliseconds.ToString() & " ms"
                                Dim myTable As DataTable = New DataTable
                                myTable.Load(myReader1)
                                DataGridView1.DataSource = myTable
                            End If
                        End Using
                        Exit Select
                    Case 1
                        Using myReader2 As SqlDataReader = myCommand2.EndExecuteReader(myResult2)
                            ' 将查询结果显示在第二个 DataGridView 控件中。
                            If myReader2.Read() Then
                                mySecondWatch.Stop()
                                elapsedTime2.Text = "第二个返回的查询结果:" & _
                                  mySecondWatch.ElapsedMilliseconds.ToString() & " ms"
                                Dim myTable As DataTable = New DataTable()
                                myTable.Load(myReader2)
                                DataGridView2.DataSource = myTable
                            End If
                        End Using
                        Exit Select
                    Case WaitHandle.WaitTimeout
                        Exit Select
                End Select
            Next

        Catch ex As Exception

            MessageBox.Show("使用 WaitHandles 返回数据时发生错误,请再次尝试。", "请注意")

        End Try

        myConnection1.Close()
        myConnection2.Close()
        messageReturned.Text = "数据已经使用 WaitHandles 返回!"

        Me.btnWaitAsynch.Enabled = True
    End Sub

    Private Sub testResultsGroupBox_Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles testResultsGroupBox.Enter

    End Sub
End Class

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -