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

发布于 2024-11-06 19:11:35 字数 617 浏览 1 评论 0原文

我发现 Windows 和 Ubuntu 上的 Mono 之间的 SerialPort.Open() 实现存在差异。这是我当前的实现:

        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 中工作,让我检查另一个程序是否已经打开了串行端口?

I am finding a difference in the implementation of SerialPort.Open() between Windows and Mono on Ubuntu. Here is my current implementation:

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

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

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

        return true;

In Windows, if I have another program with the same serial port open, then an exception is thrown and the function returns false. However, in Mono, the serial port still gets opened, regardless of whether or not another program already has the serial port open. It even reads and writes to the serial port at the same time as the other program.

So the question is, is there a way that will work both in Windows and in Mono that will allow me to check if another program already has the serial port open?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏花。依旧 2024-11-13 19:11:35

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

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

In POSIX this behaviour is due to different file locking semantics: many processes can access the same file. If you'd run your code on Mono on Windows, you would see the same behaviour as Microsoft .Net is showing.

To work in the same way on Linux, open_serial() method in Mono native helper would have to acquire flock() on the opened file descriptor.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文