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

时间:2013-11-21 18:51:19

标签: c# .net 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设备,而不是必须将其标记为准备后者................

谢谢, 标记

1 个答案:

答案 0 :(得分:0)

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

或者,之前我曾使用过此library,这使您可以与Windows设备管理器进行交互。本文提供了有关如何扩展类以监视设备更改的一些细节,您可以实现这一点,并且运气好的话,在设备暂时断开连接时会引发一个事件 - 您可以使用它来测试您的设备而不是可持续投票吗?