public void Capture() { Focus.StartCapturing(); if (Focus.IsSubFrameActive) { var frame = Focus.GetSubFrame(); CameraService.SetRegion(frame.ChipX1, frame.ChipY1, frame.ChipX2 - frame.ChipX1, frame.ChipY2 - frame.ChipY1); Camera.SetRegion(frame.ChipX1, frame.ChipY1, frame.ChipX2 - frame.ChipX1, frame.ChipY2 - frame.ChipY1); } else { CameraService.SetRegion(0, 0, Camera.BinnedX, Camera.BinnedY); Camera.SetRegion(0, 0, Camera.BinnedX, Camera.BinnedY); } var task = CameraService.Capture(Focus.Exposure); task.ContinueWith(x => { if (x.Status == TaskStatus.RanToCompletion) { var result = x.Result; var capture = new CaptureView { BinnedX = Camera.BinnedX, BinnedY = Camera.BinnedY, ChipX = Camera.UnbinnedX, ChipY = Camera.UnbinnedY, XSize = result.XSize, YSize = result.YSize }; if (Camera.IsSubFrameActive) { capture.Frame = new SubFrame { ChipX1 = Camera.SubFrameX, ChipY1 = Camera.SubFrameY, ChipX2 = Camera.SubFrameX + Camera.SubFrameWidth, ChipY2 = Camera.SubFrameY + Camera.SubFrameHeight }; } capture.ImageArray = result.Image; capture.Image = new Mat(capture.XSize, capture.YSize, MatType.CV_16UC1, result.Image); Focus.SetCapture(capture); Camera.ChangeActualSize(capture.GetWidth(), capture.GetHeight()); if (Focus.IsStarSelected) { SelectStar(); } Focus.FrameChanged(); if (Focus.IsLoopingCapture) { Capture(); } else { Focus.StopCapturing(); } } else { Focus.StopCapturing(); } }); task.Start(); }