c# - read - ¿Es necesario sincronizar.NET SerialPort escribe/lee?
read serial port c# (2)
Aquí hay un gran hilo sobre el tema, con el autor de la clase SerialPort participando:
MSDN: ¿Cómo maneja SerialPort DataReceived?
Desde mi experiencia, he escrito una docena de aplicaciones de comunicación en serie para usarlas como simuladores de hardware, no las bloqueo. En ese momento no sabía si estaba a salvo o no, pero en la práctica, todavía no he tenido un error. (un año de uso casi constante por más de 20 evaluadores y máquinas de prueba automatizadas) Dicho esto, mis aplicaciones no abandonan la empresa, si estuviera escribiendo aplicaciones para consumo público, podría cuidarme más.
En mi aplicación, uso la clase .NET SerialPort para leer y escribir datos. La lectura se realiza utilizando el evento DataReceived, asumo internamente en un hilo ThreadPool. La escritura se realiza mediante el hilo de la interfaz de usuario (WinForms).
Me preguntaba, si es necesario sincronizar el acceso a la instancia de SerialPort, para que no puedan ocurrir lecturas / escrituras al mismo tiempo. Mi conciencia me dice que debería poner candados alrededor de estas llamadas, pero estoy confundido ya que todos los ejemplos de C # SerialPort que encuentro en Internet no usan el bloqueo en absoluto.
De la documentación:
Cualquier miembro público estático (Compartido en Visual Basic) de este tipo (SerialPort) es seguro para subprocesos. No se garantiza que ningún miembro de instancia sea seguro para subprocesos.
Así que definitivamente debes sincronizar tus lecturas / escrituras con bloqueos.