我正在设置一个事件处理程序来响应串行通信。
以下代码运行良好,并将接收到的数据显示到控制台
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应用程序的消息线程。