VS C#列表可用(未使用)串行端口

时间:2016-08-01 08:31:20

标签: c# serial-port

我正在使用Visual Studio在C#中编写我的第一个程序,我有一个函数,用'可用'COM端口填充下拉列表。如何检查其中一个“可用”端口是否未在我的程序之外打开?

    foreach (string portName in System.IO.Ports.SerialPort.GetPortNames())
    {
        serialPort1.PortName = portName;
        if (serialPort1.IsOpen == false) // Only list if it is not in use - does not work - .IsOpen is only valid from within this app
        {
            CommsBox.Items.Add(portName);
        }
    }

我希望这样做,但它不起作用。

1 个答案:

答案 0 :(得分:0)

初始化serialPort1时?

你应该创建一个SerialPort的新实例,并打开它以知道它是否像这样免费:

foreach (string portName in System.IO.Ports.SerialPort.GetPortNames())
    {
        try{
            SerialPort serialPort1 = new SerialPort();
            serialPort1.PortName = portName;
            serialPort1.Open();
            CommsBox.Items.Add(portName); //If you can open it it's because it was free, so we can add it to available
            serialPort1.Close(); //Should close it again
            }
        catch (Exception ex){
            //manage the exception...
        }
    }

More information about 'SerialPort' class

修改

最好的解决方案是关注@Baddack评论:

“Hans Passant说得最好:”这样的代码永远无法在多任务操作系统上可靠地工作。在调用Open()之前,您无法找到。在这一点上,你得到一个清晰的异常。“。你应该只用所有COM端口填充组合框并让用户决定。如果COM端口正在使用,那么抛出异常然后你可以处理它拜托。“