日期:2014-05-17  浏览次数:21770 次

C#中 串口拔出的情况下(U口转的串口)关闭程序异常
如题  写了个串口程序~使用C#的SerialPort控件处理串口数据。在程序使用串口的时候拔出串口(U口转的串口)之后,在关闭应用程序的时候出现异常,提示“对端口的访问被拒绝”。
      描述:开始认为原因是因为串口在使用中被拔出,系统无法释放串口,经查找相关资料,加入了串口拔出探测事件,在拔出串口的时候关闭串口。仍然存在问题。后经过测试发现在拔出串口的时候C#中的SerialPort控件会自动探测到串口的拔出并关闭串口。而且我曾测试将SerialPort控件释放掉,并无异常。但只有在关闭主程序的时候会出现“对端口的访问被拒绝”的 异常。对此表示疑惑~是哪里占用或者访问了我的串口程序~如何解决这个异常~(如果不解决,跳过也行。目前在各个位置加上try catch代码都无法捕捉到)。在非调试的情况下弹出  windows程序异常退出,是否将问题发送。。。。如此如此的提示。

------解决方案--------------------
文件句柄丢失,无解!!

SerialPort设计时没考虑到:
1:在Window系统中正常情况下打开的“文件”是不可能被删除。
2:但虚拟串可却突破了这一点。

所以,如果在“使用中”的USB转串口的设备,在未“Close”的情况下移除,那么将导致程序中的“SerialPort”对象即无法关闭,无法正常运行,也法重新再打开。

如果有这种用法时,还是建议用标准串口。


------解决方案--------------------
关闭程序的时候,捕获异常就行了