如果端口已在 Mono 中打开,C# SerialPort.Open() 不会抛出异常

标签 c# mono serial-port

我发现 SerialPort.Open() 在 Windows 和 Ubuntu 上的 Mono 之间的实现有所不同。这是我当前的实现:

        if (serPort.IsOpen)
        {
            serPort.Close();
        }

        serPort.BaudRate = Convert.ToInt32(baudRateCmbBox.Text);
        serPort.PortName = serPortCmbBox.Text;

        try
        {
            serPort.Open();
        }
        catch
        {
            return false;
        }

        return true;

在 Windows 中,如果我有另一个程序打开了相同的串行端口,则会抛出异常并且函数返回 false。但是,在 Mono 中,串行端口仍然会打开,而不管另一个程序是否已经打开了串行端口。它甚至可以与其他程序同时读取和写入串口。

所以问题是,有没有一种方法可以同时在 Windows 和 Mono 中工作,让我可以检查另一个程序是否已经打开了串口?

最佳答案

在 POSIX 中,这种行为是由于不同的文件锁定语义:许多进程可以访问同一个文件。如果您在 Windows 上的 Mono 上运行您的代码,您会看到与 Microsoft .Net 所显示的相同的行为。

要在 Linux 上以相同的方式工作,open_serial() Mono native 助手中的方法必须获取 flock()在打开的文件描述符上。

关于如果端口已在 Mono 中打开,C# SerialPort.Open() 不会抛出异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5944004/

相关文章:

php - 用php在ubuntu上监听串口

c# 在图片框上绘制一个矩形?

c# - docker : c# how to run selenium via webapi

c# - 我可以在 MS.Net Framework 4.0 中使用 SqlClient 的 Mono 实现吗?

mono - 我如何在 Linux 上的 Mono 上使用 RabbitMQ

c++ - 为什么无法从 "read"获取数据到 uint8_t 数组?

linux - 在 linux 中使用 ioctl() 调用设置串口的 DTR RTS 引脚时出现问题

c#网络爬虫优化

c# - 如何使用异步命令 MVVM WPF

c# - mono-service2 不会在 OSX 上创建锁定文件