Пример #1
0
        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);
        }
Пример #2
0
 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;
 }
Пример #3
0
        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();
            }
        }