-1
这是我第一次使用串口,所以我刚刚得知他们在不同的线程上运行,我不知道多线程,所以我不知道从哪里开始修复我的代码,网络搜索只是让我更像Invoke。SerialPorts和多线程 - 跨线程操作无效
下面是我通过rs232端口连接的条码扫描器的整个代码,我只是接收数据并将其放在标签上。
在设置标签文本所接收到的数据,我得到一个错误......
跨线程操作无效:控制“Label1的”从比它创建的线程以外的线程访问。
Imports System.IO.Ports
Public Class Form1
Dim WithEvents com4 As New SerialPort
Private Sub com4_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles com4.DataReceived
Dim returnStr As String
returnStr = com4.ReadExisting
Label1.Text = returnStr
com4.DiscardInBuffer()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Try
With com4
.PortName = "Com4"
.BaudRate = 38400 '9600
.Parity = Parity.None
.DataBits = 8
.StopBits = StopBits.One
End With
com4.Open()
Catch ex As Exception
MsgBox(ex.ToString)
End Try
End Sub
End Class
嗨,我使用Visual Studio 2008和这似乎并没有工作。 – crimson
谢谢,你介意解释2个答案之间的区别吗?我尝试了visual studio 2010的第一个答案,它的工作原理。第一个答案对我来说也很简单。 – crimson
这两个都会导致控件在UI线程上被操纵。第一次使用lamda,这使得它更简单。 – dbasnett