如何在Visual C#中打开连接之前检查COM端口是否存在

6

在连接到选定的COM端口之前,我需要检查其是否存在(否则会出错)。我使用的是Visual Studio Express 2013 C#。是否有一些方法可以隐藏这个错误?

谢谢.. ~Richard


1
你有尝试过任何方法吗? - Soner Gönül
尝试/捕获。如果错误是“文件未找到”,则没有这样的串行端口。 - Ben
3个回答

13

你应该做两件事。第一件是检查 System.IO.Ports.SerialPort.GetPortNames()。这将告诉你端口是否存在,类似于:

var portExists = SerialPort.GetPortNames().Any(x => x == "COM1");

如果端口已经被占用,您还需要在打开端口时捕获异常。

var port = new SerialPort("COM1");
try
{
    port.Open();
}
catch (Exception ex)
{
    // Handle exception
}

现在你需要小心并阅读 http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.open(v=vs.110).aspx ,了解 SerialPort.Open() 可能会抛出哪些异常,以确保你适当地处理每个异常。


5

不错...但我也会检查可用的串口是否已经通过SerialPort.IsOpen属性打开... - sebastian s.
@sebastians。检查是否可用,然后尝试打开是毫无意义的,因为在您检查和打开之间,其他人可能会打开端口。既然您需要错误检查代码,那么就让错误处理程序处理它。处理其他进程正在使用资源的情况是少数几种情况之一,其中流程控制异常处理是可以的。 - Scott Chamberlain

1
使用try/catch并使用异常处理来告诉用户出了什么问题:
 SerPort = new SerialPort("COM8");

 try
 {
     SerPort.Open();
 }
 catch (Exception ex)
 {
     Console.WriteLine("Error opening port: {0}", ex.Message);
 } 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接