Ejemplo para reconocimiento de puertos COM

        private static async Task TryAutoDetectPort()
        {
            bool found = false;
            string iniPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "WSSPOSINT.INI");
            IniFile myconfinifile = new IniFile(iniPath, true);

            
            List<PuertoCOMInfo> todosLosPuertos = PuertoCOMDetector.ObtenerTodosLosPuertos();
            foreach (PuertoCOMInfo puerto in todosLosPuertos)
            {
                WriteLog($"Testing {puerto.NombrePuerto}: {puerto.Descripcion}");
                myconfinifile.WriteString("CommLib", "port", puerto.NombrePuerto);

                if (await CheckPort())
                {
                    found = true;
                    WriteLog($"Detected Port {puerto.NombrePuerto}");
                    _isPosConnected = true;
                    break;
                }
            }

            if (!found)
            {
                WriteLog($"Error. Port was not found");
            }
        }

        public static List<PuertoCOMInfo> ObtenerTodosLosPuertos()
        {
            Dictionary<string, PuertoCOMInfo> puertosUnicos = new Dictionary<string, PuertoCOMInfo>();

            //Método 1: SerialPort.GetPortNames
            string[] puertosSimples = SerialPort.GetPortNames();
            foreach (string portName in puertosSimples)
            {
                if (!puertosUnicos.ContainsKey(portName))
                {
                    puertosUnicos[portName] = new PuertoCOMInfo
                    {
                        NombrePuerto = portName,
                        Descripcion = "Puerto serial",
                        Fabricante = "Desconocido"
                    };
                }
            }

            // Ordenar resultado
            return puertosUnicos.Values
                .OrderBy(p => ExtraerNumeroCOM(p.NombrePuerto))
                .ToList();
        }


        private static async Task<bool> CheckPort()
        {
            try
            {
                Dictionary<string, object> conntestMessage = new Dictionary<string, object>
                {
                    { "transactionType", "CONNTEST" },
                };

                JavaScriptSerializer serializer = new JavaScriptSerializer();
                string message = serializer.Serialize(conntestMessage);
                string response = await ProcessMessageWithTimeoutAsync(message, 5);

                WriteLog($"CheckPort: {response}");
                JavaScriptSerializer deserializer = new JavaScriptSerializer();
                Dictionary<string, object> data = deserializer.Deserialize<Dictionary<string, object>>(response);
                string responseCode = data["responseCode"]?.ToString();

                return responseCode == "0";
            }
            catch (Exception)
            {
                return false;
            }
        }