.Net C# 串口 Serialort safe handle has been closed 问题的解决

2021-04-26 18:35

阅读:596

标签:catch   串口驱动   base   异常   strong   final   解决方法   c#   论坛   

最近在一个平台上使用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 问题的解决

标签:catch   串口驱动   base   异常   strong   final   解决方法   c#   论坛   

原文地址:http://www.cnblogs.com/zodiac444/p/7878289.html


评论


亲,登录后才可以留言!