estoy usando el siguiente código para leer los valores de un puerto COM:Cómo leer la comunicación del puerto serie en tampón y analizar los mensajes completos
Private port As New SerialPort("COM13", 9600, Parity.None, 8, StopBits.One)
Private Sub port_DataReceived(ByVal sender As Object, ByVal e As SerialDataReceivedEventArgs)
Debug.Print(port.ReadExisting())
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
AddHandler port.DataReceived, New SerialDataReceivedEventHandler(AddressOf port_DataReceived)
port.Open()
End Sub
Esto funciona muy bien, pero de vez en cuando es imposible encontrar todos los datos y, a cambio, da como resultado dos cadenas en lugar de solo una.
Un ejemplo sería si el puerto COM enviaba sobre la palabra "HELLO2YOU" era el siguiente aspecto:
HEL
LO2YOU
o
HELLO2
YOU
cómo puedo poner un amortiguador en allí para que se asegura de que tenga todos los datos leídos antes de mostrarlos?
Gracias!
Hans tiene razón en que ReadLine() es una forma fácil de obtener mensajes completos terminados por un valor de "nueva línea". Sin embargo, evitaría usar ReadLine ya que normalmente se implementa como una función de bloqueo y degradará el rendimiento de su GUI y otras tareas. Normalmente almacenaría los caracteres en una matriz hasta que recibí el carácter de terminación, luego llamé al analizador de comandos. – Jeff
No, no cuando lo llamas en el controlador de eventos DataReceived, se ejecuta en una cadena de subprocesos. –