c# - C# 挂起与 Arduino 的关闭连接
问题描述
我正在编写一个向 Arduino 发送一些简单命令的 C# 程序。通过 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 Standard 的设备
- 该应用程序是用 C# 编写的
- 一段时间后(或者可能是由于未知的原因,到目前为止)连接 Arduino 的端口从枚举端口列表中消失了
- 该程序最初在我的日志中报告“设备已断开连接”,然后是“端口 COM9 不存在”消息
- 设备管理器在“端口”树上报告 COM9 (!!)
- 如果我关闭程序并重新运行它,它会报告“COM9 不存在”,如果我列出端口,则 COM9 不会出现
我的猜测是usbser驱动程序一团糟。
到目前为止,唯一的解决方案是重置电路板。
有没有办法在不重新启动的情况下重置驱动程序并检查它是否以已知状态返回?或者也许是没有检测到端口的 DotNet 框架?
解决方案
推荐阅读
- reactjs - 无法渲染从 React App 内部的 API 获取的图像
- swift - 通用快速对象序列化?
- c# - C#:Net Core 3.1 包含 Linq 导致客户端异常错误
- python - 保存到 csv - numpy.ndarray' 对象没有属性 'append'
- reactjs - 如何通过单击 React 中的另一个组件来删除一个组件?
- excel - Excel JS API displayDialogAsync 错误 5001
- php - PHP MYSQL 语句执行不会检索 MYSQL 中特定变量的数据
- react-native - Metro bundler 之后未显示:npx react-native run-android
- r - 使用函数在数据框中创建一个带有矢量化输入的新列
- kubernetes-helm - Helm 2.16 的防火墙/端口要求