1. 程式人生 > >.Net C# 串口 Serialort safe handle has been closed 問題的解決

.Net C# 串口 Serialort safe handle has been closed 問題的解決

人在 詭異 final 得到 strong 內部 函數 國外 最終

最近在一個平臺上使用SerialPort類開發程序時,發現程序在使用SerialPort類時會異常退出,而且詭異的是,就算把所有操作串口的代碼都放在try{}catch{}塊中也無法捕獲這個異常。最終,在國外一個論壇上發現了一個解決方法。

comport.open();

GC.SuppressFinalize(comport.BaseStream);

也就是在打開串口後,立刻調用GC.SuppressFinalize(comport.BaseStream); 這個函數可以阻止垃圾回收器去回收SerialPort類內部的Stream對象。問題也就解決了。發生這個問題的原因我並不知道,可能是.NET或者是串口驅動程序的一個BUG。 另外,理論上應該在串口關閉前調用 GC.ReRegisterForFinalize(comport.BaseStream); comport.Close(); 這樣可以讓垃圾回收器去回收SerialPort類內部的Stream對象. 但是有人在調用Close()函數時又得到了那個不能捕獲的異常。所以我沒有使用。況且,我的程序直到終止前都不會關閉串口,也就沒有過多測試這行代碼。

.Net C# 串口 Serialort safe handle has been closed 問題的解決