使用委托方式處理:
創(chuàng)新互聯(lián)建站10多年成都企業(yè)網(wǎng)站定制服務;為您提供網(wǎng)站建設,網(wǎng)站制作,網(wǎng)頁設計及高端網(wǎng)站定制服務,成都企業(yè)網(wǎng)站定制及推廣,對石牌坊等多個方面擁有豐富設計經(jīng)驗的網(wǎng)站建設公司。
Public?Class?Form1
Dim?mSTR?As?String
Dim?strData?As?String
Dim?strDat?As?String
Dim?mRecvByte()?As?Byte
Dim?Hexsj?As?String
Dim?form2?As?Form
Private?Sub?SerialPort1_DataReceived(ByVal?sender?As?Object,?ByVal?e?As?System.IO.Ports.SerialDataReceivedEventArgs)?Handles?SerialPort1.DataReceived
Dim?mSize?As?Integer?=?Me.SerialPort1.BytesToRead
ReDim?mRecvByte(mSize?-?1)
SerialPort1.Read(mRecvByte,?0,?mSize)
BeginInvoke(New?EventHandler(AddressOf?ONMLoadA),?SerialPort1.BytesToRead())?'使用委托方式顯示接收到的字符串
End?Sub
Sub?ONMLoadA(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?'委托
strDat?=?""
TextBox1.Text?=?""
Dim?i?As?Integer
For?i?=?0?To?UBound(mRecvByte)?'mSize?-?1
strData?=?strData??IIf(mRecvByte(i)??15,?Hex(mRecvByte(i)),?"0"??Hex(mRecvByte(i)))??"?"
Next
Dim?sj?As?Byte
For?i?=?1?To?Len(strData)?Step?3?'處理為ASCII字符
sj?=?Val("H"??Mid(strData,?i,?2))
If?sj??32?Or?sj??128?Then?'當接收字節(jié)中有Chr(0)時,其后字符被切割
strDat?=?strDat??"."
Else
strDat?=?strDat??Chr(sj)
End?If
Next
TextBox1.Text?=?strDat?'顯示字符
TextBox2.Text?=?strData?'顯示為16進制
TextBox3.Text?=?Len(strData)?/?3
End?Sub
對同一個串口的操作應該放在單個線程里,你的程序應該將串口接收和串口關閉的執(zhí)行都放在一個線程里進行,這樣在接收數(shù)據(jù)的間隙就可以正常執(zhí)行close動作。而不會造成兩個線程都在操作串口。
你定義的委托需要帶參數(shù)才行,DataReceived事件中沒有接收數(shù)據(jù)代碼,下面的代碼經(jīng)測試可用
Delegate Sub SetTextCallback(ByVal InputString As String)
Private Sub ShowString(ByVal comData As String)
txt_Rect.Text += comData '將收到的數(shù)據(jù)入接收文字框中
txt_Rect.SelectionStart = txt_Rect.Text.Length
txt_Rect.ScrollToCaret()
End Sub
Private Sub SerialPort1_DataReceived(ByVal sender As Object, ByVal e As System.IO.Ports.SerialDataReceivedEventArgs) Handles SerialPort1.DataReceived
Dim inData As String = SerialPort1.ReadExisting
Dim d As New SetTextCallback(AddressOf ShowString)
BeginInvoke(d, inData)
End Sub
0x3F表示字符"?"
估計是你的發(fā)送指令不正確,設備返回你發(fā)送的指令后面加''?""
這么跟你說吧,條碼掃描器就相當于自動打字的鍵盤一樣,會把掃描到的條碼自動轉(zhuǎn)換為數(shù)字然后發(fā)送到電腦中。你打開記事本,然后掃描一些條碼試試就知道了。
你的條碼掃描器的說明書應該還有各種設置方法的說明的,可以給掃描器增添各種功能,比如在條碼數(shù)字的后面增加一個回車鍵,這在編程中比較有用。
你可以預先約定一個截止附,讀取的字節(jié)統(tǒng)統(tǒng)放到緩存區(qū)里,直到讀到截止附再處理、顯示。