2013-07-18 69 views
0

這在理論上更多的是一個問題,而不是實踐中的問題,因爲我目前無法測試它,因爲缺少一個相當笨重的設備來測試我創建的程序。我的問題是,一個串口,在它的生命週期中,沒有SerialPort.Close()被調用?此外,在調用方法之前,連接是否會超時?串口連接是否會在SerialPort.Close()方法之外關閉?

另外,當我需要提交一個新的命令或者是否安全地始終保持打開狀態時,是否有任何理由在完成發佈命令後重新打開它?

+1

第二部分:不是真的,除非系統上有其他服務正在爭奪那個港口。否則,一旦您的應用程序關閉/崩潰,該端口將被釋放。此外,http://msdn.microsoft.com/en-us/library/system.io.ports.serialport.close.aspx建議您應該避免關閉端口,然後期望立即重新打開。 – cpf

+0

如果拔下電纜線怎麼辦? – SLaks

+0

根據我的經驗,只要Com端口存在,並且訪問它不會被另一個程序鎖定,C#就不會特別在意設備或電纜是否連接到串口。我從來沒有見過它的時間。讀超時會發生,但不會影響串口的打開/關閉狀態。我沒有機會有效地測試這個很長的時間。 – DanteTheEgregore

回答

3

串行連接(意思是物理連接或端口對象)永遠不會超時,即使拔下電纜。但是,如果串行端口是USB轉換器,如果拔掉USB端口將斷開串行連接,則可以禁用該設備。

SerialPort是IDisposable,所以如果你處置它,它將關閉。

串行超時只有在您執行讀操作並且沒有數據時纔會發生。這對串行端口設備或連接沒有影響。 (串行超時也可能發生在Writes上,但這種情況通常不太常見,只有在涉及握手並且接收方阻止接收時纔會發生。)

+0

由於完全沒有理由處理我在退出之前在程序中建立的串口連接,當我沒有提交命令時是否有任何理由關閉並重新打開它? – DanteTheEgregore

+2

除非您與其他程序共享端口,否則我沒有看到任何原因。 –

相關問題