检测USB串行适配器是否物理断​​开

Mar*_*arr 5 .net c# service

首先,我想说我知道这个网站上已经有这一点的版本,其他人详述了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设备而不是必须将其标记为准备后者...............)

谢谢,马克

Pat*_*ood 0

您通过串行通信的设备是什么?它是否支持发送握手/状态请求?如果是这样,您是否可以间歇性地轮询它以检查设备是否仍然存在,并且如果超时后没有任何返回,请自行引发异常?

或者,我以前使用过这个一次,它允许您与 Windows 设备管理器交互。本文提供了有关如何扩展该类以监视设备更改的一些详细信息,您可以实现这一点,并且幸运的是,在设备短暂断开连接时会引发一个事件 - 您可以使用它来测试您的设备,而不是比持续轮询可能吗?