Exemplo n.º 1
0
        /// <summary>
        /// Копирование файлов.
        /// </summary>
        public void CopyRun(Dispatcher DGUI, DirInfoModel infoModel, Status status)
        {
            DGUI.BeginInvoke(() =>
            {
                status.IsError = false;
                status.Message = "Подготовка к копированию..";
                infoModel.OnWorking();
            }, DispatcherPriority.Normal);

            if (infoModel == null || !infoModel.CanWork)
            {
                DGUI.BeginInvoke(() =>
                {
                    status.IsError = true;
                    status.Message = "Нет данных";
                    if (infoModel != null)
                    {
                        infoModel.CanPrepare = true;
                    }
                });
                return;
            }
            //+ doing
            DGUI.BeginInvoke(() =>
            {
                status.Message = "Копирование..";
            });
            var       currentIndex = 0;
            Stopwatch stopWatch    = new Stopwatch();

            stopWatch.Start();
            var totalForCopy = infoModel.NewFilesFrom + infoModel.ReplaceFilesFrom; //- в идеале подсчитать с учетом отмененных (когда будет реализация)

            foreach (var item in infoModel.Items)
            {
                CopyItemWithInners(DGUI, infoModel, item, status, totalForCopy, stopWatch, ref currentIndex);
            }
            stopWatch.Stop();
            //+ stats
            DGUI.BeginInvoke(() =>
            {
                if (infoModel.Errors.Any())
                {
                    status.IsError       = true;
                    status.Message       = String.Format("Копирование завершено с ошибками (ошибок: {0})", infoModel.Errors.Count());
                    infoModel.CanPrepare = true;
                    infoModel.CanWork    = true; //- если была ошибка, то даем сразу еще возможность попробовать (может, исправили что-то с правами доступа или т.п.)
                }
                else
                {
                    status.IsError       = false;
                    status.Message       = "Копирование завершено";
                    infoModel.CanPrepare = true;
                }
            });
        }