private void DoImage() { _camera.StartExposure(); byte[] rawBytePixels = null; while (true) { while (!_camera.GetExposure(ref rawBytePixels)) { } var rawShortPixels = new ushort[rawBytePixels.Length / 2]; Buffer.BlockCopy(rawBytePixels, 0, rawShortPixels, 0, rawBytePixels.Length); if (_save > 0) { _save--; SaveImage(rawShortPixels, _camera.Width, _camera.Height); } if (_solveTask != null && (_solveTask.IsCompleted || _solveTask.IsFaulted || _solveTask.IsCanceled)) { _solveTask.Wait(); _solveTask = null; } if (_solve && _solveTask == null) { _solve = false; _solveTask = DoSolve(rawShortPixels, _camera.Width, _camera.Height); } var pixels = ProcessImage(rawShortPixels); try { _form.BeginInvoke((Action)(() => { var locked = _bitmap.LockBits(new Rectangle(0, 0, _bitmap.Width, _bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format32bppRgb); Marshal.Copy(pixels, 0, locked.Scan0, locked.Width * locked.Height); _bitmap.UnlockBits(locked); _form.Invalidate(); })); } catch { // form is closed break; } } _camera.StopExposure(); }