private void ExtractionFinished(string extractionDir, bool success) { extractProgressPanel1.UpdateProgress(LastestProgress); ExtractionProgressTimer.Stop(); CancelExtractButton.Enabled = false; Application.DoEvents(); if (ExtractionTask != null && ExtractionTask.Status == TaskStatus.Running) { ExtractionTask.Wait(2000); } extractProgressPanel1.FinishExtraction(); //ExtractingLabel.Visible = false; //CurrentFileLabel.Text = "Copying files to destination..."; CancelExtractButton.Text = "Close"; try { if (success) { CopyingFilesToDest = true; var extractedFiles = Directory.GetFileSystemEntries(extractionDir); var result = FileHelper.MoveFiles(extractedFiles, TargetPath, false); if (!result) { //show error message } } } finally { CopyingFilesToDest = false; NativeMethods.DeleteFileOrFolder(extractionDir); } CancelExtractButton.Enabled = true; }
private void StartExtraction() { CreateDestinationFolder(); string tmpExtractDir = GetTmpExtractionDirectory(); CancellationSource = new CancellationTokenSource(); ExtractionStart = DateTime.Now; LastestProgress = LifFile.ExtractionProgress.Default; ExtractionProgressTimer.Start(); extractProgressPanel1.BeginExtraction(); var entriesArray = ItemsToExtract.ToArray(); if (ExtractFolderContent) { entriesArray = (ItemsToExtract[0] as LifFile.FolderEntry).Entries.ToArray(); } ExtractButton.Enabled = false; DestinationGroupBox.Enabled = false; ProgressGroupBox.Enabled = true; ExtractionTask = Task.Factory.StartNew(() => { bool extractionSucceded = false; try { LifFile.ExtractEntries(entriesArray, tmpExtractDir, CancellationSource.Token, OnExtractionProgress); extractionSucceded = true; } catch { } BeginInvoke((Action)(() => ExtractionFinished(tmpExtractDir, extractionSucceded))); }); }