public void OpenCamera()
        {
            ASICameraDll2.ASIOpenCamera(_cameraId);

            ASICameraDll2.ASI_CAMERA_INFO ci;
            ASICameraDll2.ASIGetCameraProperty(out ci, _cameraId);
            _info = ci;

            ASICameraDll2.ASIInitCamera(_cameraId);
            _status = ASI_STATUS.OPENED;
        }
        public static Camera GetCameraByIndex(int cameraIndex)
        {
            if (cameraIndex >= Count || cameraIndex < 0)
            {
                throw new IndexOutOfRangeException();
            }

            ASICameraDll2.ASI_CAMERA_INFO infoTemp;

            ASICameraDll2.ASIGetCameraProperty(out infoTemp, cameraIndex);

            int cameraId = infoTemp.CameraID;

            return(_cameras[cameraId] ?? (_cameras[cameraId] = new Camera(cameraId)));
        }