private async Task <CompositionProcessingResult> TakePicture(CancellationToken token) { try { _logger.Trace("Начало фотографирования"); TakingPicture = true; UpdateCommands(); token.ThrowIfCancellationRequested(); //_imageProcessor.ImageChanged -= ImageProcessorOnStreamChanged; Size liveViewImageStreamSize; await WaitLiveView(token); _logger.Trace("Начало фотографирования:Синхронизация закончена"); token.ThrowIfCancellationRequested(); using (var liveViewStream = new MemoryStream(LiveViewImageStream)) { var img = Image.FromStream(liveViewStream); liveViewImageStreamSize = img.Size; } _logger.Trace("Размеры картинки получены"); var stream = await _imageProcessor.TakePictureAsync(liveViewImageStreamSize, _settings, token); token.ThrowIfCancellationRequested(); _logger.Trace("Конец фотографирования"); //TakingPicture = false; UpdateCommands(); SetWindowStatus(true); _navigator.NavigateForward <CameraResultViewModel>(this, stream); return(stream); } catch (OperationCanceledException e) { _logger.Trace(e, "Произошла отмена операции."); return(new CompositionProcessingResult(null, LiveViewImageStream)); } catch (Exception ex) { _logger.Error(ex, "Ошибка фотографирования"); } _dialogService.ShowInfo("Камера не была готова, попробуйте ещё раз. =)"); GoBack(); return(new CompositionProcessingResult(null, LiveViewImageStream)); }