-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