使用ArduinoUploader库上传Hex文件至Arduino时遇System.InvalidOperationException错误
ArduinoUploader上传Hex文件报错:Sequence contains more than one element 原因与解决方法
报错原因
你注释掉了PortName配置项,此时ArduinoUploader会自动扫描系统中匹配ArduinoModel.UnoR3的串口设备。当系统中存在多个符合该型号特征的串口设备时,组件内部的查询逻辑会因为找到多个结果而抛出Sequence contains more than one element异常——因为它默认期望只找到一个匹配的设备。
解决方法
方法1:显式指定串口端口
取消PortName的注释,填入Arduino Uno R3实际连接的COM端口号(比如你代码里的COM3),让组件直接使用指定端口,跳过自动扫描逻辑:
private void MenuItem_Mode_Oscilloscope(object sender, RoutedEventArgs e) { var uploader = new ArduinoSketchUploader( new ArduinoSketchUploaderOptions() { FileName = @"C:\Users\thinkhigh\Desktop\StandardFirmata.ino.hex", PortName = "COM3", // 取消注释并填写正确的COM口 ArduinoModel = ArduinoUploader.Hardware.ArduinoModel.UnoR3 }); Thread.Sleep(2000); uploader.UploadSketch(); }
方法2:手动处理多设备扫描结果
如果需要保留自动扫描功能,可通过组件的API获取所有匹配的串口,再手动选择目标端口(比如固定选第一个,或弹出选择框让用户选择):
private void MenuItem_Mode_Oscilloscope(object sender, RoutedEventArgs e) { // 获取所有匹配Uno R3的串口设备 var ports = ArduinoUploader.Hardware.SerialPortList.GetPortNames(ArduinoUploader.Hardware.ArduinoModel.UnoR3); if (ports.Length == 0) { MessageBox.Show("未找到Arduino Uno R3设备"); return; } else if (ports.Length > 1) { MessageBox.Show($"找到多个设备,将使用第一个端口:{ports[0]}"); // 此处可扩展为弹出选择框让用户指定目标端口 } var uploader = new ArduinoSketchUploader( new ArduinoSketchUploaderOptions() { FileName = @"C:\Users\thinkhigh\Desktop\StandardFirmata.ino.hex", PortName = ports[0], ArduinoModel = ArduinoUploader.Hardware.ArduinoModel.UnoR3 }); Thread.Sleep(2000); uploader.UploadSketch(); }
内容的提问来源于stack exchange,提问作者Sarang Dutta
相关产品推荐
相关产品推荐

