Saltar al contenido

C# comprobar si un puerto COM (serie) ya está abierto

Intenta interpretar el código bien antes de utilizarlo a tu proyecto si tdeseas aportar algo puedes dejarlo en los comentarios.

Solución:

Necesitaba algo similar hace un tiempo, para buscar un dispositivo.

Obtuve una lista de puertos COM disponibles y luego simplemente iteré sobre ellos, si no arrojaba una excepción, traté de comunicarme con el dispositivo. Un poco tosco pero funcionando.

var portNames = SerialPort.GetPortNames();

foreach(var port in portNames) 
    //Try for every portName and break on the first working

Así es como lo hice:

      [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
    internal static extern SafeFileHandle CreateFile(string lpFileName, int dwDesiredAccess, int dwShareMode, IntPtr securityAttrs, int dwCreationDisposition, int dwFlagsAndAttributes, IntPtr hTemplateFile);

luego más tarde

        int dwFlagsAndAttributes = 0x40000000;

        var portName = "COM5";

        var isValid = SerialPort.GetPortNames().Any(x => string.Compare(x, portName, true) == 0);
        if (!isValid)
            throw new System.IO.IOException(string.Format("0 port was not found", portName));

        //Borrowed from Microsoft's Serial Port Open Method :)
        SafeFileHandle hFile = CreateFile(@"\." + portName, -1073741824, 0, IntPtr.Zero, 3, dwFlagsAndAttributes, IntPtr.Zero);
        if (hFile.IsInvalid)
            throw new System.IO.IOException(string.Format("0 port is already open", portName));

        hFile.Close();


        using (var serialPort = new SerialPort(portName, 115200, Parity.None, 8, StopBits.One))
        
            serialPort.Open();
        

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *