[英]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.