首先,我想说我知道这个网站上已经有这一点的版本,其他人详述了USB串行适配器的问题,并在某人的应用程序中处理它们的物理断开连接.我已经审查了其中几个讨论,并尝试了各种建议但没有取得任何成功.也许我错过了一些东西,但也许我不是.在这一点上,我已经忘记了我尝试了多少和哪些,我希望从这篇文章中重新开始,而不仅仅是重复旧项目.
总结大多数原始帖子,其中最新的帖子至少来自过去一年,在已拔出的USB串行适配器的Windows /开发处理中存在一个已知问题.一些帖子/解决方案围绕一个未处理/无法捕获的异常,当关闭串口并在.NET 4.0中修复时应该解决此问题,并且我认为允许捕获事件/异常.
我正在做和经历的是这样的:
我有一个用C#编写的.NET 4.0 Service应用程序,它打开一个COM端口并使用内置的SerialPort类来监听数据.然后可以将该数据报告给其他本地应用程序或远程报告给其他位置.我正在测试使用Tripp Lite USB转串口适配器,但问题的实际报告来自使用具有内部USB到串行端口适配器设备的笔记本电脑的人,该设备将不时"断开连接"和"重新连接"/到Windows操作系统.我通过在Windows服务应用程序中打开端口时物理断开USB设备来模拟我的设备问题.
我在测试/调试中看到的是,对USB设备的断开或重新连接没有任何反应.我正在接收数据,并且数据流停止到服务应用程序.如果我重新连接设备,COM端口仍然对应用程序开放,但没有新数据.如果我关闭端口,则没有"应用程序爆炸"/ UnhandledException错误.端口关闭,应用程序正常停止.在任何时候,我都会收到一个可捕获的异常,这是我希望看到的.如果我启动应用程序,数据将再次开始流动.
我希望应用程序知道何时从系统中删除USB串行/ COM端口,最好在SerialPort级别有某种异常,这样我就可以捕获异常,关闭端口,然后进入"重新打开端口模式"直到设备"重新连接"到PC.这是围绕SerialPort类以这种方式实现的吗?或者我是否需要寻求以通用"USB设备"断开而不是"串行端口"断开为中心的解决方案?(我的应用程序以编程方式确定设备已经是USB设备而不是必须将其标记为准备后者...............)
谢谢,马克