2013-11-21 83 views
5

首先,我想说我知道这个网站上已经有这个版本的版本,其他版本详细介绍了USB串行适配器的问题以及在某人的应用程序中处理物理断开连接的问题。我已经回顾了其中几次讨论,并尝试了各种建议,但没有取得任何成功。也许我错过了一些东西,但也许我没有。在这一点上,我已经失去了多少尝试,哪些是我尝试过的,我希望从这篇文章中重新开始,而不是重新审视旧的项目。检测物理断开连接的USB串行适配器

总结大部分原创帖子,其中最新的帖子至少在过去的一年中,已经有一个已知的问题,在拔掉USB串口适配器的Windows /开发处理过程中出现了问题。一些帖子/解决方案围绕一个未处理的/不可捕捉的异常发生,当关闭串口和.NET 4.0中的一个修复程序时,它应该解决这个问题,并且我认为可以捕获事件/异常。

我在做什么,并经历是这样的:

我已经写在C#.NET 4.0服务的应用程序打开一个COM端口和监听使用内置SerialPort类的数据。然后这些数据可能会被报告给其他本地应用程序或远程传送到其他位置。我正在使用Tripp Lite USB转串口适配器进行测试,但实际的问题报告来自使用笔记本电脑的人,该笔记本电脑具有内部USB转串口适配器设备,该设备将不时“断开”和“重新连接”到Windows操作系统。在Windows服务应用程序中打开端口时,我正在通过物理断开USB设备来模拟出现问题。

我在测试/调试中看到的是,对USB设备的断开或重新连接没有反应。我正在接收数据,并且数据流仅停止在服务应用程序中。如果我重新连接设备,COM端口仍然对应用程序开放,但没有新数据。如果关闭端口,则不会出现“应用程序爆炸”/ UnhandledException错误。端口关闭并且应用程序正常停止。在任何时候,我是否会收到一个可捕获的异常,这是我希望看到的结果。如果我启动应用程序,数据会再次开始流动。

我希望应用程序知道USB串行/ COM端口何时从系统中移除,最好是在SerialPort级别有某种异常,以便我能够捕获异常,关闭端口并进入“重新打开端口模式“,直到设备”重新连接“到PC。这是否可能以这种方式围绕SerialPort类来实现呢,还是我需要寻求一种围绕通用“USB设备”断开连接而不是“串行端口”断开连接的解决方案? (我有我的应用程序在编程上确定该设备是USB设备,而不是必须将其标记为准备后者...............)

谢谢, Mark

+0

自从我发现以来的一些事情:在USB串口适配器断开连接的情况下,我停止了Service应用程序,将SerialPort.IsOpen值设置为false,以便检测到断开连接并标记串口关闭(是.NET 4.0修复??)。但是,我还没有确定何时IsOpen标志变化发生。我有一个覆盖Close()的地方,它不会在断开连接时被调用。 –

回答

0

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

或者,我之前使用过这个library,它允许您与Windows设备管理器进行交互。本文提供了一些关于如何扩展类以监控设备变化的细节,您可以实现这一点,并且在设备暂时断开连接的同时有一些事件会引发事件 - 您可以使用它来测试您的设备比连续投票,可能吗?