我正在使用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);
}
}
我希望这样做,但它不起作用。
答案 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端口正在使用,那么抛出异常然后你可以处理它拜托。“