Hola

Estoy diseñando una pequeña aplicación para leer el puerto serial. Los datos que el dispositivo externo envia al COM es un string de 10 bytes que no es mas que un contador de pulsos.

En VB, he agregado un formulario con lo básico:
- Un timer
- Un objeto SerialPort con valores por defecto
- Dos botones
- Un text box, para mostrar el valor del contador.

Utilizo los botones para abrir y cerrar el puerto:
botón 1:
Try
SerialPort1.Open()

Timer1.Enabled = True
BtnAbrePuerto.Enabled = False
BtnCierraPuerto.Enabled = True

Catch ex As Exception
MessageBox.Show(ex.Message)
Timer1.Enabled = False
Return
End Try

Botón 2
Timer1.Enabled = False
BtnAbrePuerto.Enabled = True
BtnCierraPuerto.Enabled = False
SerialPort1.Close()


En el timer tengo:
If SerialPort1.IsOpen Then
data1 = SerialPort1.Read(buffer, 0, 10) 'leemos los 10 bytes para colocarlos en un array
texto = System.Text.Encoding.Default.GetString(buffer) 'convertir el valor a texto para desplegar
TextBox1.Text = texto
End If


El resto de las variables:
Dim buffer(9) As Byte
Dim data1 As Integer
Dim texto As String


Esto funciona hasta cierto punto. Cuando el dispositivo esta recibiendo pulsos, esto no se ve reflejado en el textbox y no se nota que el contador incremente. Si se detiene la entrada de pulsos (pero sin desconectar ni cerrar el puerto), se observa como el contador comienza a operar. En pocas palabras, en el textbox aparece el string hasta que se ya no hay pulsos.

¿Cuál puede ser la razón para que esto suceda? Es muy importante para la aplicación que justo en el momento que se recibe el pulso, se despliegue en pantalla.

También intenté, dentro del timer, abrir el puerto, leer el buffer, desplegar y cerrar el puerto. Esto mejoró en el sentido de que ahora se actualiza con mas frecuencia el valor, pero luego el string no se lee bien y además que por momentos la aplicación deja de responder. Por ejemplo, la primera lectura podria ser '0000000001', la siguiente '0000000020' y luego '0000000003' y otra mas '0000004000'. Al parecer el orden de los bytes comienza a moverse de posición.

¿Cuales pueden ser las causas de estos problemas?

Gracias