/// <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; } }); }