You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 09:42:49