使用委托方式處理:
成都創(chuàng)新互聯(lián)專業(yè)為企業(yè)提供扎賚特網(wǎng)站建設(shè)、扎賚特做網(wǎng)站、扎賚特網(wǎng)站設(shè)計(jì)、扎賚特網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁設(shè)計(jì)與制作、扎賚特企業(yè)網(wǎng)站模板建站服務(wù),10多年扎賚特做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
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?'當(dāng)接收字節(jié)中有Chr(0)時(shí),其后字符被切割
strDat?=?strDat??"."
Else
strDat?=?strDat??Chr(sj)
End?If
Next
TextBox1.Text?=?strDat?'顯示字符
TextBox2.Text?=?strData?'顯示為16進(jìn)制
TextBox3.Text?=?Len(strData)?/?3
End?Sub
使用 PrintDocument 控件的 Print() 方法可以打印指定對(duì)象中的內(nèi)容,參考代碼如下:
Private?Sub?Button1_Click(ByVal?sender?As?System.Object,?ByVal?e?As?System.EventArgs)?Handles?Button1.Click
PrintDocument1.Print()
End?Sub
Private?Sub?PrintDocument1_PrintPage(ByVal?sender?As?System.Object,?ByVal?e?As?System.Drawing.Printing.PrintPageEventArgs)?Handles?PrintDocument1.PrintPage
Dim?bm?As?New?Bitmap(Me.DataGridView1.Width,?Me.DataGridView1.Height)
DataGridView1.DrawToBitmap(bm,?New?Rectangle(0,?0,?Me.DataGridView1.Width,?Me.DataGridView1.Height))
e.Graphics.DrawImage(bm,?0,?0)
End?Sub
vb 里有printer對(duì)象,打印很簡(jiǎn)單。
vb.net 升級(jí)為
Microsoft.VisualBasic.PowerPacks.Printing.Compatibility.VB6 .Printer
這個(gè)沒用過,你研究下
關(guān)于串口通訊的問題:
很明顯,你還不知道(不會(huì)、不習(xí)慣)使用事件驅(qū)動(dòng)的方式接收數(shù)據(jù)。
建議你仔細(xì)看看串口組件(無論VB6還是VB.net)的OnComm事件,你的問題很容易解決。
關(guān)于以太網(wǎng)通訊:
在TCP通訊中端口確實(shí)可以重用,你百度一下“TCP端口重用”能查到很多示例。
但絕大多數(shù)情況下不推薦端口重用,而應(yīng)該采取服務(wù)器端建立連接池的方法。
或者,干脆不用TCP,用UDP解決也可以。