コード例 #1
0
        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));
        }