C#正在关闭与Arduino的连接

C#正在关闭与Arduino的连接,c#,arduino,serial-port,windows-7-embedded,C#,Arduino,Serial Port,Windows 7 Embedded,我正在编写一个C#程序,向Arduino发送一些简单的命令。通过USB串行虚拟端口 有时程序挂起,即使代码受try/catch块保护 当我看到问题时,问题似乎在于关闭端口 功能非常简单: void Send() { try { Debug.WriteLine("SR1 "+rel+" "+status); _serialArduino.Open(); Debug.WriteLine("SR2"); _serialArduino.WriteLine(stri

我正在编写一个C#程序,向Arduino发送一些简单的命令。通过USB串行虚拟端口

有时程序挂起,即使代码受try/catch块保护

当我看到问题时,问题似乎在于关闭端口

功能非常简单:

void Send() {
  try {  
    Debug.WriteLine("SR1 "+rel+" "+status);
    _serialArduino.Open();
    Debug.WriteLine("SR2");
    _serialArduino.WriteLine(string.Format("switch {0} {1}\n", rel, Convert.ToSByte(status)));
    Debug.WriteLine("SR3 '"+_serialArduino.ReadLine()+"'");
    _serialArduino.Close();
    Debug.WriteLine("SR4");
    Thread.Sleep(400);
  } catch (Exception e) {
    LogManager.Write(string.Format("ERR SwitchRel({0}, {1}) - {2}", rel, status, e.Message));
  }
}
我在Close函数期间了解到一个问题,但在本例中未定义DataReceived事件处理程序(=null)

有什么想法吗

*编辑以添加一些详细信息*

经过几天的调试和日志分析,我发现以下几点:

  • 我正在一台运行Win7Embedded标准的设备上工作
  • 应用程序是用C编写的#
  • 一段时间后(或者可能是由于未知原因,目前为止),连接Arduino的端口从枚举端口列表中消失
  • 程序最初报告我的日志“设备已断开连接”,然后报告“端口COM9不存在”消息
  • 设备管理器在“端口”树上报告COM9(!!)
  • 如果我关闭程序并重新运行它,它会报告“COM9不存在”,如果我列出端口,COM9不会出现
我猜usbser的司机是一团糟。
到目前为止,唯一的解决方案是重置电路板。
有没有办法在不重新启动的情况下重置驱动程序,并检查它是否以已知状态返回?
或者可能是DotNet框架没有检测到端口

值得一试的是,在应用程序启动时打开端口,并一直保持打开状态。这是在编辑线程之前完成的。当我修改源代码以在应用程序开始时打开端口,并在应用程序结束时关闭端口时,报告了这些错误。