Click here to Skip to main content
15,881,248 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
Working with the serial port in .Net I found what appears to be a fairly common problem:

VB
SerialPort.Read(buffer,offset,length)


The above code doesn't return the bytes requested, instead, return the bytes available in buffer and you need to call this function repeatedly in order to obtain the required bytes.

So, based in this post I make my own solution with a Extension Method:

VB
<Extension()>
Public Function Read(ByVal port As SerialPort, ByVal count As Integer) As Byte()
 Dim buffer(count - 1) As Byte
 Dim readBytes As Integer
 Dim totalReadBytes As Integer
 Dim offset As Integer
 Dim remaining As Integer = count

 Try
    Do
       readBytes = port.Read(buffer, offset, remaining)
       offset += readBytes
       remaining -= readBytes
       totalReadBytes += readBytes
    Loop While remaining > 0 AndAlso readBytes > 0
 Catch ex As TimeoutException
    ReDim Preserve buffer(totalReadBytes - 1)
 End Try

Return buffer

End Function


The above function loops until all bytes requested are read. If a TimeOutException occurs (because there are no more data in buffer), the fuction returns the bytes read until the exception occured or a empty byte array if no byte was read.

I hope this can help or if any of you have a better option let us know.

Thanks
Posted

Repost this as a tip/trick. Your post here won't be seen very long at all.
 
Share this answer
 
Comments
cass3000 6-Mar-12 12:50pm    
thanks Dave, i just post it as a tip
I posted this as a Tip
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900