簡體   English   中英

如果端口已在Mono中打開,則C#SerialPort.Open()不會引發異常

[英]C# SerialPort.Open() does not throw an exception if port is already open in Mono

我發現在Ubuntu上Windows和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中工作,這將允許我檢查另一個程序是否已經打開了串口?

在POSIX中,此行為是由於不同的文件鎖定語義:許多進程可以訪問同一文件。 如果您在Windows上的Mono上運行代碼,您將看到與Microsoft .Net顯示的行為相同的行為。

要在Linux上以相同的方式工作,Mono本機助手中的open_serial()方法必須在打開的文件描述符上獲取flock()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM