我正在寻找一个用于.NET的串行端口组件,它克服了与突然拔出USB-to-RS232适配器相关的内置串行端口组件的问题,以及在端口打开时暂停计算机。 (在拔下设备电源或计算机被暂停后返回时发生无法解决的错误。)
我一直在使用Richard Grier's solution,但是从暂停状态恢复时仍然存在问题。
您会推荐第三方组件吗?我尝试了几个,每个都有它们的缺点。理想情况下,我希望直接替换标准串口,但我会尽我所能。
(注意:如果你发现这篇文章有点模糊,我很抱歉。这个问题针对那些熟悉我的问题的人......这是一个非常普遍的问题。)
感谢您的时间。
编辑:事实证明升级到.NET 4并使用串行类在XP上运行良好,但不在Windows 7上运行。
答案 0 :(得分:2)
通过popular demand,这在.NET 4.0中得到了解决。内部SerialStream和EventRunner类有两个重要的变化。当Windows API返回拒绝访问错误时,SerialStream.Dispose(bool)方法避免触及串行端口,表明端口消失。这将阻止Dispose()方法和终结器崩溃。
如果尝试清除串行端口错误失败,则EventRunner.CallEvents()方法可避免抛出无法捕获的异常。当模拟器在使用中被拉出插槽时会发生这种情况。
基本建议保持不变,但是,每当设备驱动程序出现异常时,SerialPort都会支持异常,并且不会让您的程序在没有任何诊断的情况下继续运行。当串行端口正在使用时拔下USB连接器时,USB仿真器的驱动程序几乎都是行为异常。您必须使用“安全删除硬件”托盘图标。任何类型的设备都不需要使用此图标,这些设备本身不支持Plug&玩。像串口一样。
答案 1 :(得分:1)
虽然发布你尝试过哪些解决方案会有所帮助(对某人推荐你已经排除过的东西没有意义),但我可以推荐CommStudio组件。
虽然它有点贵,但它是一个很好的组件,并且已经完成了一些高吞吐量(相对来说,当然),高度双向的应用程序,我已经处理过,它从来没有出现过意外的问题设备拆除。