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

解决方案 »

  1.   

    文件句柄丢失,无解!!SerialPort设计时没考虑到:
    1:在Window系统中正常情况下打开的“文件”是不可能被删除。
    2:但虚拟串可却突破了这一点。所以,如果在“使用中”的USB转串口的设备,在未“Close”的情况下移除,那么将导致程序中的“SerialPort”对象即无法关闭,无法正常运行,也法重新再打开。如果有这种用法时,还是建议用标准串口。
      

  2.   

    还能有“串口拔出探测事件”怎么探测?
    “而且我曾测试将SerialPort控件释放掉,并无异常。”这个什么意思?是SerialPort控件释放掉,再拔串口没有异常?