我正在编写一个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)。
有什么主意吗?
*编辑后添加了一些详细信息*
经过几天的调试并登录analisys,我发现了以下内容:
我的猜测是usbser驱动程序一团糟。
到目前为止,唯一的解决方案是重置主板。
有没有一种方法可以在不重新启动的情况下重置驱动程序,并检查驱动程序是否返回已知状态?
或者也许是不检测端口的DotNet Framework?