C# 检测正在物理断开的USB串行适配器

C# 检测正在物理断开的USB串行适配器,c#,.net,service,C#,.net,Service,首先,我想说的是,我知道这个网站上已经有了这一点的版本,还有其他一些详细说明了带USB串行适配器的问题,以及在某人的应用程序中处理物理断开连接的问题。我回顾了其中的几次讨论,并尝试了各种建议,但都没有成功。也许我错过了什么,但也许我没有。在这一点上,我已经记不清我尝试了多少和哪些,我希望从这篇文章中重新开始,而不仅仅是重复旧的东西 总结一下大部分的原始帖子,最近的一篇至少是在过去一年内发表的,在Windows/development处理未拔出的USB串行适配器时存在一个已知的问题。一些帖子/解决

首先,我想说的是,我知道这个网站上已经有了这一点的版本,还有其他一些详细说明了带USB串行适配器的问题,以及在某人的应用程序中处理物理断开连接的问题。我回顾了其中的几次讨论,并尝试了各种建议,但都没有成功。也许我错过了什么,但也许我没有。在这一点上,我已经记不清我尝试了多少和哪些,我希望从这篇文章中重新开始,而不仅仅是重复旧的东西

总结一下大部分的原始帖子,最近的一篇至少是在过去一年内发表的,在Windows/development处理未拔出的USB串行适配器时存在一个已知的问题。一些帖子/解决方案围绕关闭串口时发生的未处理/不可修补的异常以及.NET 4.0中的修复程序展开,该修复程序应该能够解决此问题,并且我认为,允许捕获事件/异常

我正在做和经历的是:

我有一个用C#编写的.NET4.0服务应用程序,它打开一个COM端口,并使用内置的SerialPort类侦听数据。然后,这些数据可能会报告给其他本地应用程序或远程报告给其他位置。我正在使用Tripp-Lite USB-to-Serial Port适配器进行测试,但实际报告的问题来自使用内置USB-to-Serial Port适配器设备的笔记本电脑的人,该设备将不时从Windows操作系统“断开”和“重新连接”。在Windows服务应用程序中,当端口打开时,我通过物理断开USB设备来模拟我的设备出现的问题

我在测试/调试中看到,对USB设备的断开或重新连接没有反应。我正在接收数据,数据流刚好停止流向服务应用程序。如果重新连接设备,COM端口仍对应用程序开放,但没有新数据。如果关闭端口,则不会出现“应用程序爆炸”/“未处理的异常”错误。端口关闭,应用程序正常停止。在任何时候,我都不会收到我希望看到发生的可捕获异常。如果启动应用程序,数据将再次开始流动

我希望应用程序知道USB串行/COM端口何时从系统中删除,最好是在SerialPort级别出现某种异常,允许我捕获异常,关闭端口,并进入“重新打开端口模式”,直到设备“重新连接”对于PC。这是否可以通过SerialPort类实现,或者我是否需要寻求一种以断开通用“USB设备”而不是断开“串行端口”为中心的解决方案?(我让我的应用程序以编程方式确定该设备已经是USB设备,而不必在准备后者时将其标记为USB设备………)

谢谢,
标记

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


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

我后来发现了一些情况:在USB串行适配器断开连接并且我停止服务应用程序时,SerialPort.IsOpen值设置为false,因此有人检测到断开连接并将串行端口标记为关闭(这是.NET 4.0修复程序吗??)。但是,我还没有决定在IsOpen标志发生更改时捕获。我有一个Close()覆盖,在断开连接时不会调用它。