事件处理程序可用于控制台应用程序,但不能用于窗体应用程序(VB.NET)



我正在设置一个事件处理程序来响应串行通信。

以下代码运行良好,并将接收到的数据显示到控制台

Imports System
Imports System.IO.Ports
Module Module1
    Sub DataReceivedHandler(
                        sender As Object,
                        e As SerialDataReceivedEventArgs)
        Dim sp As SerialPort = CType(sender, SerialPort)
        Threading.Thread.Sleep(500)
        Dim indata As String = sp.ReadExisting()
        Console.Write(indata)
    End Sub
    Sub Main()
        Dim mySerialPort As New SerialPort("COM2")
        mySerialPort.BaudRate = 9600
        mySerialPort.Parity = Parity.None
        mySerialPort.StopBits = StopBits.One
        mySerialPort.DataBits = 8
        mySerialPort.Handshake = Handshake.None
        mySerialPort.RtsEnable = True
        AddHandler mySerialPort.DataReceived, AddressOf DataReceivedHandler
        mySerialPort.Open()
        Console.WriteLine("Press any key to continue...")
        Console.WriteLine()
        Console.ReadKey()
        mySerialPort.Close()
    End Sub
End Module

然而,这段代码完全相同,只是在表单应用程序中使用,但无法显示任何消息。

Imports System.IO.Ports
Public Class Form1

    Sub DataReceivedHandler(
                        sender As Object,
                        e As SerialDataReceivedEventArgs)
        Dim sp As SerialPort = CType(sender, SerialPort)
        Threading.Thread.Sleep(500)
        Dim indata As String = sp.ReadExisting()
        MsgBox(indata)
    End Sub
    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        Dim mySerialPort As New SerialPort("COM2")
        mySerialPort.BaudRate = 9600
        mySerialPort.Parity = Parity.None
        mySerialPort.StopBits = StopBits.One
        mySerialPort.DataBits = 8
        mySerialPort.Handshake = Handshake.None
        mySerialPort.RtsEnable = True
        AddHandler mySerialPort.DataReceived, AddressOf DataReceivedHandler
        mySerialPort.Open()
    End Sub
End Class

不要使用MsgBox,使用Debug.Print

您在一个线程上调用MsgBox,该线程不是winform应用程序的消息线程。

相关内容

最新更新