就算把所有操作串口的代码都放在try{}catch{}块中也无法捕获这个异常

时间:2022-05-28 08:37:25

比来在一个平台上使用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()函数时又得到了阿谁不能捕获的异常。所以我没有使用。况且,我的措施直到终止前都不会*串口,也就没有过多测试这行代码。