protected override void BeginTask(object state) { ExtractionTask task = (ExtractionTask)state; Exception exception = null; try { if (!CancelRequested) { task.OnProgressStarted(this, new ProgressStartedEventArgs(task)); } SevenZipExtractor extractor = new SevenZipExtractor(task.Archive); extractor.Extracting += new EventHandler <SevenZip.ProgressEventArgs>(delegate(object sender, SevenZip.ProgressEventArgs e) { if (!CancelRequested) { task.OnProgressUpdate(this, new ProgressUpdateEventArgs(task, e.PercentDone, 100)); } }); extractor.ExtractArchive(task.Destination); } catch (Exception e) { exception = e; } finally { if (!CancelRequested) { task.OnProgressCompleted(this, new ProgressCompletedEventArgs(exception, CancelRequested, task, 100, 100)); } } base.BeginTask(state); }
private void UpdateExtractionStatus(ExtractionTask task, ListViewItem item, int current, int total, int completed, string status) { item.SubItems[0].Text = task.Archive; item.SubItems[1].Text = "100"; item.SubItems[2].Text = string.Format("{0}", current); item.SubItems[3].Text = string.Format("{0:00}%", completed); item.SubItems[4].Text = status; }
private void InitializeExtractionTask(DownloadTask state) { string filename = Path.GetFileName(state.Url); string archive = state.Destination; ListViewItem item = _downloadTable[state]; ExtractionTask task = new ExtractionTask(state.Destination, Path.GetDirectoryName(state.Destination)); task.ProgressUpdate += new EventHandler<ProgressUpdateEventArgs>(OnExtractionProgressUpdate); task.ProgressCompleted += new EventHandler<ProgressCompletedEventArgs>(OnExtractionProgressCompleted); Invoke((MethodInvoker)delegate() { UpdateExtractionStatus(task, item, 0, 100, 0, "Extraction Queued"); }); _extractionTable.Add(task, item); _extractionManager.Queue(task); if (!_extractionManager.HasBegun) { _extractionManager.Begin(); } }