C# EDSDK EDSSETProperty数据故障

C# EDSDK EDSSETProperty数据故障,c#,edsdk,C#,Edsdk,在VisualStudio中,我有一个程序,当前每次单击按钮都会拍摄5张照片。我希望程序拍摄这5张照片,然后更改光圈设置,最后拍摄1张照片。 没有真正相关的代码,因此这是为已经了解SDK的人编写的 我已经仔细研究过如何处理这个问题,但我对一般的编码还缺乏经验 谢谢 也许是有用的代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.Configuration; usi

在VisualStudio中,我有一个程序,当前每次单击按钮都会拍摄5张照片。我希望程序拍摄这5张照片,然后更改光圈设置,最后拍摄1张照片。 没有真正相关的代码,因此这是为已经了解SDK的人编写的

我已经仔细研究过如何处理这个问题,但我对一般的编码还缺乏经验

谢谢

也许是有用的代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading;
using System.Windows.Forms;
using EDSDKLib;

using CanonCameraAppLib;
using CanonCameraAppLib.Remote;

namespace CanonCameraApp

{ 
public partial class CanonCameraApp : Form
{
    public delegate void TakePhotoDelegate(int delay);

    private CameraAPI api;
    private RemoteServer server;
    private TakePhotoDelegate takePhotoDelegate;        

    public CanonCameraApp()
    {
        InitializeComponent();
        api = CameraAPI.Instance;
        takePhotoDelegate = new TakePhotoDelegate(takePhotograph);

        init();            
    }

    private void server_OnTakePhotoCommandEvent(RemoteCommandEventArgs e)
    {
        this.Invoke(takePhotoDelegate, e.Delay);
    }

    private void init()
    {
        loadCameras();
        registerEvents();
        if (Convert.ToBoolean(ConfigurationManager.AppSettings["StartServerOnStartup"]))
        {
            startServerListener();
        }
    }

    private void registerEvents()
    {
        CameraAPI.OnCameraAdded += new CameraAddedEventHandler(api_OnCameraAdded);
    }

    private void api_OnCameraAdded(CameraAddedEventArgs e)
    {
        scanForCamerasToolStripMenuItem_Click(null, new EventArgs());
    }

    private void startServerListener()
    {
        server = new RemoteServer(Convert.ToInt32(ConfigurationManager.AppSettings["ListenPort"]));
        server.OnTakePhotoCommandEvent += new TakePhoto(server_OnTakePhotoCommandEvent);
        new Thread(server.Start).Start();
    }

    private void loadCameras()
    {
        try
        {
            cbCameras.DataSource = api.Cameras;
            cbCameras.DisplayMember = "Name";
            cbCameras.Enabled = true;
            btnTakePhoto.Enabled = true;
            btnProperties.Enabled = true;
            scanForCamerasToolStripMenuItem.Enabled = false;
            subscribeToEvents();
        }
        catch (CameraNotFoundException)
        {
            MessageBox.Show("No cameras were detected.  Please make sure that they are plugged in and are turned on.");
            cbCameras.Enabled = false;
            btnTakePhoto.Enabled = false;
            btnProperties.Enabled = false;
            scanForCamerasToolStripMenuItem.Enabled = true;
        }
    }

    private void subscribeToEvents()
    {
        List<Camera> cameras = getCameraList();

        foreach (Camera camera in cameras)
        {
            camera.OnNewItemCreated += new CanonCameraAppLib.Events.NewItemCreatedEventHandler(camera_OnNewItemCreated);
        }
    }

    void camera_OnNewItemCreated(Camera sender, CanonCameraAppLib.Events.NewItemCreatedEventArgs e)
    {
        if (chbPreview.Checked)
        {
            PhotoPreview preview = new PhotoPreview(e.Item, true);
            preview.Show();
        }
    }
  //  private void changeAperature(int value)
    //{
      //  Camera camera = getSelectedCamera();

    //    camera.changeAperture(value);
    //}
    private void takePhotograph(int delay)
    {
        Camera camera = getSelectedCamera();

        camera.takePhotograph(delay);
    }


    private Camera getSelectedCamera()
    {
        return (Camera)cbCameras.SelectedItem;
    }

    private List<Camera> getCameraList()
    {
        List<Camera> cameras = new List<Camera>(cbCameras.Items.Count);

        foreach (object camera in cbCameras.Items)
        {
            cameras.Add((Camera)camera);
        }

        return cameras;
    }

    #region Handled Form Events

        private void button1_Click(object sender, EventArgs e)
        {

            for (int i = 0; i <=4; i++)
                takePhotograph(Convert.ToInt16(textBox1.Text));
            for (int i = 0; i <= 1; i++) 

                ;
        }

        private void scanForCamerasToolStripMenuItem_Click(object sender, EventArgs e)
        {
            loadCameras();
        }

        private void quitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            quit();
        }

        private void CanonCameraApp_FormClosing(object sender, FormClosingEventArgs e)
        {
            quit();
        }

        private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
        {
            new About().ShowDialog(this);
        }

        /// <summary>
        /// Opens the Camera Properties window
        /// </summary>
        private void btnProperties_Click(object sender, EventArgs e)
        {
            new CameraProperties(getSelectedCamera()).Show();
        }

    #endregion

    private void quit()
    {
        if (server != null)
        {
            server.Stop();
        }
        Application.ExitThread();
        Application.Exit();
    }
}
}
使用系统;
使用System.Collections.Generic;
使用系统组件模型;
使用系统配置;
使用系统数据;
使用系统图;
使用System.Linq;
使用系统文本;
使用系统线程;
使用System.Windows.Forms;
使用EDSDKLib;
使用CanonCameraAppLib;
使用CanonCameraAppLib.Remote;
名称空间CameraApp
{ 
公共部分类CanonCameraApp:表单
{
公共代表无效的光电门(int延迟);
私人摄像机;
专用远程服务器;
专用光电门;
公共摄像机应用程序()
{
初始化组件();
api=CameraAPI.Instance;
takePhotoDelegate=新的takePhotoDelegate(takephoto);
init();
}
专用void服务器\u OnTakePhotoCommandEvent(RemoteCommandEventArgs e)
{
调用(takePhotoDelegate,即延迟);
}
私有void init()
{
加载摄影机();
registerEvents();
if(Convert.ToBoolean(ConfigurationManager.AppSettings[“StartServerOnStartup”]))
{
startServerListener();
}
}
私有无效注册表事件()
{
CameraAPI.OnCameraAdded+=新的CameraAddedEventHandler(api_OnCameraAdded);
}
专用void api_OnCameraAdded(CameraAddedEventArgs e)
{
scanForCamerasToolStripMenuItem_单击(空,新事件参数());
}
私有void startServerListener()
{
服务器=新的远程服务器(Convert.ToInt32(ConfigurationManager.AppSettings[“ListenPort”]);
server.OnTakePhotoCommandEvent+=新拍摄的照片(server\u OnTakePhotoCommandEvent);
新线程(server.Start).Start();
}
私用摄影机()
{
尝试
{
cbcamers.DataSource=api.camers;
cbcamers.DisplayMember=“Name”;
cbcamers.Enabled=true;
btntakphoto.Enabled=true;
btnProperties.Enabled=true;
scanForCamerasToolStripMenuItem.Enabled=false;
下标事件();
}
捕获(CameraNotFoundException)
{
MessageBox.Show(“未检测到任何摄像头。请确保它们已插入并已打开。”);
cbcamers.Enabled=false;
btntakphoto.Enabled=false;
btnProperties.Enabled=false;
scanForCamerasToolStripMenuItem.Enabled=true;
}
}
私有无效订阅事件()
{
列出摄影机=getCameraList();
foreach(摄影机中的摄影机)
{
camera.OnNewItemCreated+=新的CanonCameraAppLib.Events.NewItemCreatedEventHandler(camera\u OnNewItemCreated);
}
}
创建无效照相机(照相机发送器,CanonCameraAppLib.Events.NewItemCreatedEventArgs e)
{
如果(chbPreview.Checked)
{
照片预览=新的照片预览(如项目,真);
preview.Show();
}
}
//私有void changeAperature(int值)
//{
//摄像头=getSelectedCamera();
//照相机。更改光圈(值);
//}
私人照片(整数延迟)
{
摄像头=getSelectedCamera();
拍照(延迟);
}
私人摄像机getSelectedCamera()
{
返回(摄像头)cbCameras.SelectedItem;
}
私有列表getCameraList()
{
列表摄像机=新列表(cbcamers.Items.Count);
foreach(cbCameras.Items中的对象摄影机)
{
摄像头。添加((摄像头)摄像头);
}
返回摄像机;
}
#区域处理的表单事件
私有无效按钮1\u单击(对象发送者,事件参数e)
{

对于(int i=0;i)您正在使用的SDK是什么?当前它是如何拍摄照片的?请参阅上面的编辑。谢谢