internal void ReadFiles(OperationInterop interop)
        {
            if (Streams.Count == 0)
            {
                throw new InvalidOperationException("Не установлен входной файл");
            }

            OnBeforeFileReading();
            foreach (var stream in Streams)
            {
                // >>>
                interop.SetStatusText("Чтение файла " + stream.Key);
                interop.ThrowIfCancellationRequested();
                // <<<
                ReadFile(stream.Key, stream.Value, interop);
            }
            OnAfterFileReading();
        }
        protected override void ExecuteExchange(OperationInterop interop)
        {
            // >>>
            interop.SetStatusText("Инициализация");
            interop.ThrowIfCancellationRequested();
            // <<<

            RaiseBeforeExecuteEvent();

            // >>>
            interop.SetStatusText("Обработка параметров");
            // <<<

            // >>>
            interop.SetStatusText("Чтение файлов");
            interop.ThrowIfCancellationRequested();
            interop.SetProgress(10);
            // <<<

            // Чтение файлов
            foreach (var formatter in Formatters)
            {
                formatter.ReadFiles(interop);
            }

            // >>>
            interop.SetStatusText("Обработка данных");
            interop.ThrowIfCancellationRequested();
            interop.SetProgress(50);
            // <<<

            // Before
            foreach (var formatter in Formatters)
            {
                formatter.OnBeforeFormatting();
            }

            // Processing
            foreach (var formatter in Formatters)
            {
                interop.ThrowIfCancellationRequested();
                var objectSpace = GetObjectSpace();
                bool success = false;
                try
                {
                    formatter.ProcessData(objectSpace, interop);
                    success = true;
                }
                finally
                {
                    CloseObjectSpace(objectSpace, success);
                }
            }

            // After
            foreach (var formatter in Formatters)
            {
                formatter.OnAfterFormatting();
            }

            // >>>
            interop.SetStatusText("Постобработка");
            interop.SetProgress(99);
            // <<<

            RaiseAfterExecuteEvent();
            interop.SetProgress(100);
        }