close

拉入
BackgroundWorker元件
ProgressBar元件
BackgroundWorker 主要建立這三區段函式 有不同的作用
VB2008下拉入 BackgroundWorker元件後 只會自動產生一個區段
Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
另外兩個需要自己補上

詳細可參考http://www.dotblogs.com.tw/billchung/archive/2009/05/29/8592.aspx





 Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        '  這裡的執行緒是不同於 form1的 執行緒
        Dim receive_count As Integer

 


        Do
            '-----------------------------------執行緒背景循環工作---------持續接收COM----------------
            'overtimeN = 1024
            'Do Until nnn > overtimeN     '測試循環條件

 

 

            nnn = nnn + 1
            If nnn > 1024 Then  '循環背景BAR 每  1024   重複數
                nnn = 0
            End If
            '--------若COM沒開>>> 去打開指定的COM-------------------------------------

            If SerialPort1.IsOpen = False Then '若COM沒開>>> 去打開指定的COM
                SerialPort1.PortName = passselcom  'Me.ComboBox1.Text 透過全區變數  從FORM1執行緒 傳遞給 目前執行緒

                SerialPort1.Open()

            End If

            '--------/若COM沒開>>> 去打開指定的COM/-------------------------------------

 

 

            '========================================================
            If SerialPort1.IsOpen = True Then
                ' MsgBox(SerialPort1.PortName & "--->" & "OPEN OK")


                SerialPort1.WriteLine("J")

                '  Threading.Thread.Sleep(0)


                Try

                    '-------將接收到的資料串接在一起-----
                    receive_232data_all = receive_232data_all & SerialPort1.ReadLine & ","    '讀出BUFFER現有行的資料字串 EX: AAAAA
                    'tt = tt & SerialPort1.ReadExisting    '讀出BUFFER現有的資料字串 EX: A A A A A  每次讀會多一個空格 避免麻煩不採用此法

                    receive_count = receive_count + 1
                    '-------/將接收到的資料串接在一起/-----


                    ' -----------------------'跳出循環條件 停止持續接收----------
                    If receive_232data_all.Length > 2046 Then
                        '   MsgBox("receive_count = " & receive_count)
                        Exit Do
                    End If
                    ' -----------------------'/跳出循環條件 停止持續接收/-----------

 

                Catch ex As Exception  '如果接收出錯 會有例外告知
                    MsgBox("receive_data too much BURST")
                End Try

 


                BackgroundWorker1.ReportProgress(CInt(nnn * 100 / 1024))

 

            Else
                ' MsgBox(SerialPort1.PortName & "--->" & "OPEN FAIL")

            End If

            '==================================================
        Loop

 


        '----------------------------------接收循環結束--------關閉連線--------
        If nnn = overtimeN Then
            SerialPort1.Close()
            '       MsgBox(nnn)
        End If
        '----------------------------------/接收循環結束--------關閉連線/--------

    End Sub
    Public passselcom As String

    Public receive_232data_all As String
    Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged

        '這裡的執行緒是屬於form1的執行緒


        passselcom = Me.ComboBox1.Text
        ProgressBar1.Value = e.ProgressPercentage '回報進度BAR

        ' Me.TextBox1_com.Text = receive_232data_all


        '-------------------
        '  If (SerialPort1.IsOpen = True) Then

        ' End If

        '------------------------
        'If SerialPort1.IsOpen = False Then
        '  MsgBox(SerialPort1.IsOpen.ToString)

        '   Me.TextBox1_com.Text = Me.TextBox1_com.Text.Length.ToString
        'End If

 


    End Sub

    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted

        '這裡的執行緒是屬於form1的執行緒

        Me.TextBox1_com.Text = receive_232data_all    '把RS232收集完成的數據資料從另一條執行緒 轉移過來form執行緒上輸出表格
      
    End Sub


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        passselcom = Me.ComboBox1.Text
        '  AddHandler Button3.Click, AddressOf Button2_Click
    End Sub
End Class

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 prague12 的頭像
    prague12

    prague12

    prague12 發表在 痞客邦 留言(0) 人氣()