错误跨线程操作无效VB.NET

错误跨线程操作无效VB.NET,vb.net,Vb.net,我的代码有问题。错误是 跨线程操作无效:从创建控件“label1”的线程以外的线程访问控件“label1” 代码是 公共类表单1 私有子表单1_Load(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理MyBase.Load SerialPort1.BaudRate=9600 SerialPort1.PortName=“COM9” 尝试 SerialPort1.Open() 特例 结束尝试 端接头 私有子SerialPort1_DataRe

我的代码有问题。错误是

跨线程操作无效:从创建控件“label1”的线程以外的线程访问控件“label1”

代码是

公共类表单1
私有子表单1_Load(ByVal发送方作为System.Object,ByVal e作为System.EventArgs)处理MyBase.Load
SerialPort1.BaudRate=9600
SerialPort1.PortName=“COM9”
尝试
SerialPort1.Open()
特例
结束尝试
端接头
私有子SerialPort1_DataReceived(ByVal sender作为System.Object,ByVal e作为System.IO.Ports.SerialDataReceivedEventArgs)处理SerialPort1.DataReceived
将数据设置为字符串
data=SerialPort1.ReadLine()
Label1.Text=数据
端接头
末级

如何修复它?

如果您需要它立即更新(例如,当它被其他东西用于数据时)

否则,启动InVoke,它将在下一个自由绘制事件时执行。

来自文档:当从SerialPort对象接收数据时,在辅助线程上引发DataReceived事件。由于此事件是在次线程而不是主线程上引发的,因此尝试修改主线程中的某些元素(如UI元素)可能引发线程异常。如果需要修改主窗体或控件中的元素,请使用Invoke将更改请求发回,这将在适当的线程上完成工作
Me.Invoke(Sub() Label1.Text = data)