如何在C#中检查COM端口是否被其他进程占用?

5

我有一个问题。我需要检查我选择使用的串口是否被系统中的另一个进程使用。我试图通过检查System.IO.Ports.SerialPort的对象字段IsOpen来实现,但即使该端口在另一个进程中打开,结果也是False,因此我的程序尝试打开该端口并由于异常而崩溃。除了在try catch中处理这个问题,还有其他方法吗?


我猜测IsOpen只是确定当前SerialPort实例是否与端口建立了连接。因此,它不会知道其他应用程序的情况。我认为最安全的方法是尝试连接,并捕获当它已被另一个应用程序使用时抛出的特定异常。 - Falgantil
1
不,这种测试在多任务操作系统上永远不可靠。 如果它能够以这种方式工作,那么您将会得到 IsOpen = false,然后在微秒后另一个进程打开该端口,您的代码仍将失败。 这也是为什么无法检查文件是否已打开或锁定的基本原因。 异常是唯一的方法。 这已经足够特殊了,可能很少有理由让程序继续运行,所以不要担心。 - Hans Passant
1个回答

2

您可以调用打开消息,并查找UnauthorizedAccessException来确定它是否对您免费。

无法访问端口。 - 或 - 当前进程或系统上的另一个进程已经通过SerialPort实例或未受管理的代码打开了指定的COM端口。

如果在已经打开端口的实例上打开端口,您将收到InvalidOperationException异常。


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