public AsyncProcessingEngine(IImageProvider imageProvider, IImageProcessingChain imageProcessingChain, IReceiveProcessedImageCommand receiveProcessedImageCommand)
 {
     _imageProvider         = imageProvider;
     _imageProcessingChain  = imageProcessingChain;
     _setOutputImageCommand = receiveProcessedImageCommand;
     _mediator = new AsyncProcessingMediator();
 }
        private static void SetAcquiredImage(AsyncProcessingMediator mediator, Image image)
        {
            var processingStatus = mediator.GetImageProcessingStatus();

            if (processingStatus == ImageProcessingStatus.NoImageProcessed)
            {
                mediator.SetAquiredImageAndImageAddedStatus(image);
            }
        }
        private void GetAcquiredImageAndProcessIt(AsyncProcessingMediator mediator)
        {
            var image = mediator.GetAcquiredImageAndSetImageProcessedStatus();

            try
            {
                var processedImage = _imageProcessingChain.ProcessImage(image);
                _setOutputImageCommand.Execute(processedImage);
            }
            finally
            {
                mediator.SetImageProcessingStatus(ImageProcessingStatus.NoImageProcessed);
            }
        }