private void CleanCleanBackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            var worker = (BackgroundWorker)sender;

            IsCleaningCache = true;
            OutputText      = string.Empty;
            ErrorText       = string.Empty;
            worker.ReportProgress(0);

            //使用CMD清理Winsxc等
            //CacheCacheByCmd(worker);
            //删除文件
            var toCleanFolders = SelectedItems.Select(I => I.ModuleFolder).ToList();

            Application.Current.Dispatcher.Invoke(() => { ItemsSource.Clear(); });
            CleanCacheUsingFileUtil(worker, toCleanFolders);

            //删除文件夹下所有的空文件夹
            foreach (var folder in ToCleanUpManager.GetFolders())
            {
                try
                {
                    FolderUtil.DeleteEmptyFolder(folder, false);
                }
                catch (Exception exception)
                {
                    LogHelper.Error(exception.Message);
                }
            }
        }
        private void MoveCacheFiles(List <string> allCacheFiles, ref long handledSize, MoveCacheBackgroundWorkerModel workerModel,
                                    long totalSize, BackgroundWorker worker)
        {
            var currentOperationDetail = $"正在转移。。。";

            worker.ReportProgress(-1, new ProgressChangedContent()
            {
                OperationDetail = currentOperationDetail,
            });

            var currentOperationError = string.Empty;
            int filesCount            = allCacheFiles.Count;
            int moveIndex             = 0;

            foreach (var cacheFilePath in allCacheFiles)
            {
                try
                {
                    moveIndex++;
                    handledSize += new FileInfo(cacheFilePath).Length;

                    //移动文件
                    var newFilePath = GetNewFilePath(cacheFilePath, workerModel.DeskTopFolder, workerModel.UserDefinedFolder);
                    FileUtil.Move(cacheFilePath, newFilePath);

                    //记录已经转移的缓存文件
                    workerModel.MovedFiles.Add(new MovedFileDataMode(cacheFilePath, newFilePath));

                    //删除原有文件
                    FileUtil.Delete(cacheFilePath);
                }
                catch (Exception e)
                {
                    LogHelper.Error(e.Message);
                    currentOperationError = e.Message;
                    throw;
                }
                finally
                {
                    var cleanCacheProgressDetail = $"{moveIndex}/{filesCount}";
                    //报告进度
                    var progress = totalSize == 0 ? 100 : handledSize * 100 / totalSize;
                    worker.ReportProgress(Convert.ToInt32(progress), new ProgressChangedContent()
                    {
                        ProgressDetail = cleanCacheProgressDetail,
                        OperationError = currentOperationError
                    });
                }
            }

            //删除产品文件夹及其下所有的空文件夹
            FolderUtil.DeleteEmptyFolder(workerModel.DeskTopFolder, false);
            //报告进度
            worker.ReportProgress(-1, new ProgressChangedContent()
            {
                OperationOutput = $"转移完成.."
            });
        }
 /// <summary>
 /// 恢复已经转移的缓存文件
 /// </summary>
 /// <param name="workerModel"></param>
 private void RestoreCacheFilesToPreviousPath(MoveCacheBackgroundWorkerModel workerModel)
 {
     try
     {
         foreach (var data in workerModel.MovedFiles)
         {
             File.Move(data.NewFilePath, data.PreviousFilePath);
         }
         //删除文件夹下所有的空文件夹
         FolderUtil.DeleteEmptyFolder(workerModel.UserDefinedFolder, false);
     }
     catch (Exception e)
     {
         LogHelper.Error("恢复缓存失败,异常信息为:" + e.Message);
     }
 }