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

如何通过EDSDK在C#程序中启用佳能相机实时取景并解决DEVICE_BUSY错误

解决EDSDK设置Evf_OutputDevice时的DEVICE_BUSY问题

以下是在C#中借助EDSDK解决该问题的具体步骤:

  • 确认相机连接状态
    确保相机已通过EDSDK成功打开,操作前可先检查相机是否就绪:

    var cameraStatus = MainCamera.GetSetting(PropertyID.CameraStatus);
    if ((int)cameraStatus != (int)CameraStatus.Ready)
    {
        // 等待相机就绪或提示用户检查相机状态
        return;
    }
    
  • 先启用实时取景模式
    直接设置Evf_OutputDevice可能失败,需先确保实时取景模式已启用:

    // 将Evf_Mode设置为1(代表启用实时取景,具体值参考对应相机的EDSDK文档)
    MainCamera.SetSetting(PropertyID.Evf_Mode, 1);
    // 短暂等待相机完成模式切换,避免后续操作触发BUSY
    System.Threading.Thread.Sleep(500);
    
  • 添加重试逻辑应对临时BUSY
    有时DEVICE_BUSY是相机内部处理延迟导致的,并非真的忙碌,可添加重试机制:

    int retryTimes = 3;
    bool setSuccess = false;
    while (retryTimes > 0 && !setSuccess)
    {
        try
        {
            MainCamera.SetSetting(PropertyID.Evf_OutputDevice, (int)EvfOutputDevice.PC);
            setSuccess = true;
        }
        catch (EOSDigital.API.ExecutionException ex)
        {
            if (ex.Message.Contains("DEVICE_BUSY"))
            {
                retryTimes--;
                System.Threading.Thread.Sleep(300);
            }
            else
            {
                throw; // 非BUSY异常直接抛出处理
            }
        }
    }
    
  • 禁用相机自动休眠
    部分相机的自动休眠/电源节省设置会触发BUSY,操作前可先关闭该功能:

    // 设置PowerSave为0(禁用自动关闭,具体值需参考相机型号的EDSDK文档)
    MainCamera.SetSetting(PropertyID.PowerSave, 0);
    
  • 对齐EOS Utility的操作流程
    EOS Utility启用实时取景的核心逻辑是:唤醒相机→启用实时取景模式→等待初始化完成→设置输出设备为PC。按照这个顺序执行,能最大程度避免异常。

内容的提问来源于stack exchange,提问作者dor

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 20:06:20