Aquí está el código que lee los datos de un puerto en serie. Para mantener las cosas simples, hagámoslo con un clic de botón;Error de comunicación del puerto serie, "El recurso solicitado está en uso".
private System.IO.Ports.SerialPort serialPort;
private void button1_Click(object sender, EventArgs e)
{
if (serialPort == null)
serialPort = new SerialPort("COM7", 4800, Parity.None, 8, StopBits.One);
//COM7 is hard coded just for the sake of example
if (!serialPort.IsOpen)
serialPort.Open();
textBox1.AppendText(serialPort.ReadExisting());
}
El código funciona perfectamente bien a menos que mi computadora portátil se quede dormida. Cuando el sistema se despierta de la suspensión, el objeto serialPort
no es null
, pero serialPort.IsOpen
devuelve false
y aparece el error "El recurso solicitado está en uso". al llamar al serialPort.Open()
. No hay nada en la excepción interna.
He intentado muchas cosas con serialPort
objeto como cerrar, eliminar o asignarlo explícitamente a nulo y reinicialización, pero no sirve de nada, el mismo error en la misma línea todo el tiempo.
if (!serialPort.IsOpen)
{
try
{
serialPort.Open();
}
catch
{
serialPort.Close();
serialPort.Dispose();
serialPort = null;
serialPort = new SerialPort("COM7", 4800, Parity.None, 8, StopBits.One);
serialPort.Open();
}
}
también he intentado serialPort.DataReceived
evento, pero el evento no se dispara una vez que el sistema se despertó en marcha del sueño.
La única solución consiste en detener la aplicación y ejecutarla de nuevo. Realmente apreciaré si alguien me da una pista para resolverlo de una manera decente.
Bien se podría tratar de cerrar la conexión cuando el sistema se va a dormir y tratar de reabrir el curriculum vitae. – Reniuz
¿Utiliza un puerto serie real o algún tipo de emulación de puerto? Pruebe este programa en un puerto serie real. –
@AlexFarber Es un puerto serie real, un dispositivo GPS está conectado a él. – ABH