我有一个带有GUI的.NET4 C#应用程序。 它通过USB-UART转换器FT2232与串行网络设备配合使用。转换器实现了一个带有多个USB的集线器,它们在系统中显示为多个COMxx。
我支持动态端口添加/删除操作(通过WMI),以便在插入/拔出插件时,端口会自动刷新UI。
插件操作正常,即插入后第二个或第二个端口可见。 但是堵塞就是问题:当拔掉插头时,不是所有集线器的端口都消失了,而是四个中只有一个或两个(此时所有端口都没有使用,关闭)。该问题对WinXP x86和Win7 x64有效。
一些调查显示,在一段时间后或通过计时器刷新调用SerialPort.GetPortNames()的端口列表没有帮助。该列表保持陈旧。 但是:如果我关闭带有端口的窗口(它不是主窗口)并再次重新打开它,一个幻像端口就会消失,然后所有幻像端口都会消失!
是否有人遇到类似情况或有一些想法?
可能它与我从UI上下文中调用GetPortNames的某种方式有关吗?
或者这是硬件驱动程序问题?
答案 0 :(得分:1)
我想现在我解决了这个问题:
我发现在WMI设备的事件处理程序中添加/删除的端口信息没有刷新,奇怪的是插拔操作上有很多添加/删除事件触发。
因此,如果我不立即检查添加/删除的新端口,但是让它传递到我的视图模型的更高级别,那么端口信息更新(事件触发之间)和我有一个有效的连接USB列表 - UART设备。
无论如何,在某些情况下,通常问题仍然不清楚是什么原因导致端口在注册表中更新,而在其他情况下则不然。