public void StartExposure(double Duration, bool Light) { Logger.WriteTraceMessage("StartExposure"); _canceled.IsCanceled = false; _startTime = DateTime.Now; _duration = Duration; var camera = DeviceManager.SelectedCameraDevice; Logger.WriteTraceMessage("Device Selected: " + camera.DeviceName); camera.IsoNumber.Value = GetNearesetValue(camera.IsoNumber, Iso); Logger.WriteTraceMessage("GetNearesetValue ISO: " + Iso.ToString()); camera.CompressionSetting.Value = camera.CompressionSetting.Values.SingleOrDefault(v => v.ToUpper() == "RAW"); Logger.WriteTraceMessage("SetRaw: "); bool canBulb = camera.GetCapability(CapabilityEnum.Bulb); Logger.WriteTraceMessage("CanBulb: " + canBulb.ToString()); Logger.WriteTraceMessage("Exposure Duration: " + Duration.ToString()); if (Duration > 30) { int durationMsec = (int)(Duration * 1000); if (UseExternalShutter) { ThreadPool.QueueUserWorkItem(state => { var _serialPortShutter = new SerialPortShutterRelease(ExternalShutterPort); BulbExposure(durationMsec, _canceled, _serialPortShutter.OpenShutter, _serialPortShutter.CloseShutter); }); } else { if (canBulb) { ThreadPool.QueueUserWorkItem(state => { Logger.WriteTraceMessage("Start BulbExposure"); BulbExposure(durationMsec, _canceled, camera.StartBulbMode, camera.EndBulbMode); Logger.WriteTraceMessage("End BulbExposure"); }); } } } else { if (Duration >= 1) { camera.ShutterSpeed.Value = Duration + "s"; } else { camera.ShutterSpeed.Value = GetNearesetValue(camera.ShutterSpeed, Duration); } Logger.WriteTraceMessage("GetNearesetValue Shutter"); DeviceManager.SelectedCameraDevice.CapturePhoto(); Logger.WriteTraceMessage("CapturePhoto"); } }