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

📄 form1.vb

📁 本原码用VB2005演示了串口控制,多线程的实现,程序性指
💻 VB
字号:
Imports System.Threading
Public Class Form1
    Public aa As Long
    Public a As Long
    Public b As Long
    Dim sw As New System.Diagnostics.Stopwatch
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

        SerialPort1.PortName = "com2"
        SerialPort1.Open()
        ' Timer1.Enabled = True
        ' If SerialPort1.DsrHolding = True Then

        ' End If
        'If SerialPort1.CtsHolding = True Then

        ' End If

        'SerialPort1.DtrEnable = True'''''''''''第四根线

        '  SerialPort1.RtsEnable = True '''''''''''第七根线
        a = CLng(TextBox1.Text)
        b = (Val(TextBox2.Text))
        If BackgroundWorker1.IsBusy = True Then
            Label1.Text = "busy"
        Else
            BackgroundWorker1.RunWorkerAsync()
        End If
        'If BackgroundWorker2.IsBusy = True Then
        'el2.Text = "busy"
        ' Else
        ' BackgroundWorker2.RunWorkerAsync()
        'End If
    End Sub


    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        sw.Start()
        For i As Long = 0 To a
            '  Me.SerialPort1.DtrEnable = False  '''''''''''第四根线
            SerialPort1.RtsEnable = True  '''''''''''第七根线
            ' Thread.Sleep(0.01)

            'Thread.Sleep(0.01)
            SerialPort1.RtsEnable = False '''''''''''第七根线
            '  SerialPort1.DtrEnable = False '''''''''''第四根线
            Me.BackgroundWorker1.ReportProgress(i)

            If BackgroundWorker1.CancellationPending = True Then
                e.Cancel = True
                sw.Stop()
                Exit For
            End If
        Next
        sw.Stop()
    End Sub


    Private Sub BackgroundWorker1_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker1.ProgressChanged
        Label1.Text = e.ProgressPercentage

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        If BackgroundWorker1.IsBusy Then Me.BackgroundWorker1.CancelAsync()

        ' SerialPort1.Close()
    End Sub

    Private Sub BackgroundWorker1_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker1.RunWorkerCompleted
        If e.Cancelled Then
            Label1.Text = "User cancel1"
        Else
            Label1.Text = "Completed1"
        End If

    End Sub



    Private Sub BackgroundWorker2_DoWork(ByVal sender As Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker2.DoWork
        sw.Start()
        For i As Long = 0 To a
            ' Thread.Sleep(b)
            ''SerialPort1.RtsEnable = True  '''''''''''第七根线
            ' Thread.Sleep(b)
            '' SerialPort1.RtsEnable = False '''''''''''第七根线
            ' Thread.Sleep(b)
            Me.BackgroundWorker2.ReportProgress(i)
            If BackgroundWorker2.CancellationPending = True Then
                e.Cancel = True
                sw.Stop()
                Exit For
            End If
        Next
        sw.Stop()
    End Sub

    Private Sub BackgroundWorker2_ProgressChanged(ByVal sender As Object, ByVal e As System.ComponentModel.ProgressChangedEventArgs) Handles BackgroundWorker2.ProgressChanged
        Label2.Text = e.ProgressPercentage
    End Sub

    Private Sub BackgroundWorker2_RunWorkerCompleted(ByVal sender As Object, ByVal e As System.ComponentModel.RunWorkerCompletedEventArgs) Handles BackgroundWorker2.RunWorkerCompleted
        If e.Cancelled Then
            Label2.Text = "User cancel2"
        Else
            Label2.Text = "Completed2"
        End If
        Label2.Text = sw.ElapsedMilliseconds
        ' SerialPort1.DtrEnable = False'''''''''''第四根线
        '  SerialPort1.RtsEnable = False '''''''''''第七根线
        Timer1.Enabled = False
        SerialPort1.Close()
    End Sub

    Private Sub Button3_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button3.Click
        If BackgroundWorker2.IsBusy Then Me.BackgroundWorker2.CancelAsync()

    End Sub

    Private Sub PrintDialog1_Disposed(ByVal sender As Object, ByVal e As System.EventArgs) Handles PrintDialog1.Disposed

    End Sub

    Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If SerialPort1.DsrHolding = True Then
            Label6.Text = "Dsr is ON" '''''''''''第六根线
        Else
            Label6.Text = "Dsr is off"
        End If
        If SerialPort1.CtsHolding = True Then
            Label2.Text = "cts is ON" '''''''''''第八根线
        Else
            Label2.Text = "cts is off"
        End If
        If SerialPort1.CDHolding = True Then
            Label5.Text = "CD is ON" '''''''''''第一根线
        Else
            Label5.Text = "CD is off"
        End If
        '
        'Label6.Text = "ring is ON" '''''''''''第第九根线
        '  Else
        ' Label6.Text = "CD is off"

        ' End If
    End Sub


    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

        aa = aa + 1

        SerialPort1.RtsEnable = True  '''''''''''第七根线
        'Thread.Sleep(0.01)
        Label5.Text = aa
        '  Thread.Sleep(0.1)
        SerialPort1.RtsEnable = False '''''''''''第七根线
    End Sub

    Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
        SerialPort1.PortName = "com2"
        SerialPort1.Open()
        Timer2.Enabled = True
    End Sub

    Private Sub Button5_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button5.Click
        Timer2.Enabled = False
        SerialPort1.Close()
    End Sub
End Class

⌨️ 快捷键说明

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