I had trouble with data getting chopped up using astreams. I wasn't sure which device was the problem, but I ended up adding a timer that was started when the new data event was raised, the timer was set to go off after a time delay which was the best I could do to make sure that data was done. Then, every time the new data even was raised, the timer was reset and the data was stacked until there wasn't data long enough for the timer timed out, then the data was assumed done and then parsed. Works great. The timer didn't need to run very long either since it turned out that the pauses in the data was less than 200ms.
Sub AStreams_NewData (Buffer() As Byte)
Timer1.Enabled = False
Timer1.Enabled = True
msg = msg & BytesToString(Buffer, 0, Buffer.Length, "UTF8")
End Sub
Sub Timer1_Tick
Parse_Stream
End Sub