/// <summary> /// 开始转换 /// </summary> public void StartConvert(object p) { var savePath = _mainForm.LbllblSavePath.Text; var parameters = p as List <object>; _convertingtablerowIndex = Convert.ToInt32(parameters[0]); var noticeAction = parameters[1]; var convertCompleteAction = parameters[2]; ConvertComplete completedCalback = convertCompleteAction as ConvertComplete; ProgressNotice noticeCallback = noticeAction as ProgressNotice; var imgType = parameters[3].ToString(); foreach (Row row in this.tableFiles.TableModel.Rows) { var filePath = row.Cells[FilePathColIndex].Text; var fileName = row.Cells[FileNameColIndex].Text; var fullFileName = Path.Combine(savePath, fileName.Contains(".") ? fileName.Remove(fileName.LastIndexOf(".")) : fileName); if (!Directory.Exists(fullFileName)) { Directory.CreateDirectory(fullFileName); } try { row.Tag = ConvertState.Converting; HandleDocumentToImg(filePath, fullFileName, imgType, noticeCallback, _convertingtablerowIndex); } catch (Exception ex) { row.Tag = ConvertState.NotConvert; if (ex is InvalidPasswordException) { var noticeResult = new NoticeResult { Success = false, ErrMsg = $"文件\n{fileName}\n是加密文件,请先解密!" }; this.Invoke(noticeCallback, noticeResult); } else { throw; } } //标志为转换完成 if ((ConvertState)row.Tag == ConvertState.Converting) { row.Tag = ConvertState.Converted; } _convertingtablerowIndex++; } this.Invoke(completedCalback); convertThread = null; }
/// <summary> /// Декодируем файлы сохранений /// </summary> /// <param name="moveOriginal">Флаг переноса оригинальных файлов</param> /// <param name="path">Путь для поиска webp файлов</param> /// <returns>True - запуск успешен. False - папка не найдена.</returns> public bool DecodeFiles(string path, bool moveOriginal) { bool ex = false; //Если папка действительно существует if (Directory.Exists(path)) { //Папка успешно получена ex = true; //Запускаем работу в отдельном потоке new Thread(() => { //Обнуляем количество сконвертированных файлов int converted = 1; //Инициализируем информацию о директории DirectoryInfo di = new DirectoryInfo(path); //Получаем список *.webp файлов в директории List <FileInfo> FileList = di.GetFiles("*.webp").ToList(); //Проходимся по всем файлам директории foreach (var file in FileList) { //Выполняем операции над файлом FileWork(file, moveOriginal); //Если работа была отменена if (!isWork) { //Выходим из цикла break; } //Вызываем ивент обновления ConvertProgress?.Invoke(converted++, FileList.Count); } //Если работа всё ещё идёт if (isWork) { //Открываем папку Process.Start(savePath); //Вызываем ивент завершения конвертации ConvertComplete?.Invoke(); } }).Start(); } return(ex); }
private void btnStartConvert_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(_mainForm.LbllblSavePath.Text.Trim())) { YMessageBox.ShowMsgBox(100, "请先选择要保存的路径!"); return; } this.btnStartConvert.Text = "转换中..."; SetConvertBtnEnable(false); ProgressNotice notice = ProgressAction;//创建一个委托对象 ConvertComplete convertCompleted = ConvertCompleteAction; if (convertThread != null) { convertThread = null; } convertThread = new Thread(StartConvert); var imgType = GetConvertedImgType(); convertThread.Start(new List <object> { 0, notice, convertCompleted, imgType }); }
private void TableFiles_CellMouseDown(object sender, XPTable.Events.CellMouseEventArgs e) { if (e.Column == DeleteColIndex) { var currentRow = this.tableFiles.TableModel.Rows[e.Row]; this.tableFiles.TableModel.Rows.RemoveAt(e.Row); if (this.tableFiles.TableModel.Rows.Count <= 0) { if (convertThread != null && convertThread.IsAlive) { convertThread.Abort(); } SetConvertBtnVisiable(false); ConvertCompleteAction(); AddDragTip(); return; } //判断移除行转换的状态 //重启线程转换 ProgressNotice notice = ProgressAction;//创建一个委托对象 ConvertComplete convertCompleted = ConvertCompleteAction; if (convertThread != null && convertThread.IsAlive) { convertThread.Abort(); } convertThread = new Thread(StartConvert); var imgType = GetConvertedImgType(); if ((ConvertState)currentRow.Tag == ConvertState.Converted) { _convertingtablerowIndex--; } convertThread.Start(new List <object> { _convertingtablerowIndex, notice, convertCompleted, imgType }); } }