VB.NET SerialPort.Write(string)抛出一个无法捕获的异常,并中断了COM端口

时间:2015-01-28 09:30:52

标签: vb.net winforms serial-port uncaught-exception virtual-serial-port

我正在使用VB.NET SerialPort类,我创建了一组对象来代表我们的硬件设备配置,以便我可以通过USB虚拟串口更改配置和更新设备。这些对象具有多态性,每个设备最终都从一个名为CmdSender的类继承,该类处理COM IO。 当最终删除所有已知错误并将应用程序发布到另一台PC(安装了.NET运行时但不安装Visual Studio)时,从我的代码调用SerialPort.Write(string)时偶尔会抛出一个无法捕获的异常。

这是错误消息和堆栈跟踪的最顶层部分。

  

System.IO.IOException:连接到系统的设备不是   运作。

     

在System.IO.Ports.InternalResources.WinIOError(Int32 errorCode,   String str)在System.IO.Ports.SerialStream.EndWrite(IAsyncResult   asyncResult)在System.IO.Ports.SerialStream.Write(Byte []数组中,   Int32偏移,Int32计数,Int32超时)at   System.IO.Ports.SerialPort.Write(String text)at   TDDevice.CmdSender.SendPure(String Cmd,Boolean AddCheckSum)

我无法在线找到解决此问题的任何解决方案。 还值得注意的是,当抛出此异常时,应用程序不能简单地重新启动(尽管这仍然不理想)但必须移除USB COM设备并重新插入机器,而不执行此操作我的应用程序警告我,没有找到COM端口(检查我已经内置),这告诉我.NET之后无法与COM端口交互,我还没有测试是否有其他API&#39 ; s之后仍然可以使用端口来确认问题是仅影响.NET还是端口本身(但设备管理器仍然列出端口)。

我的问题是为什么会发生这种情况,如何防止这种情况发生? (C#中的任何答案都应该没问题,因为我希望能够翻译,但VB会受到赞赏)

1 个答案:

答案 0 :(得分:0)

我使用串行端口与PIC单片机进行通信时遇到了一些问题,并且出现了这样的错误。我当时的解决方案是在发送数据后关闭端口,并在需要再次发送时再次打开。我认为既然是USB转换器,设备可能会进入睡眠模式或类似的东西。

 sendData(){
     open port
     send data
     wait for response if needed
     close port
    }

抱歉没有发布代码,但你得到了ideea