/// <summary> /// Background thread to do the downloading and installing of updates. /// </summary> /// <param name="sender">The object triggering this event/</param> /// <param name="e">Event argument.</param> private void downloader_DoWork(object sender, DoWorkEventArgs e) { List <DownloadInfo> downloads = (List <DownloadInfo>)e.Argument; SteppedProgressManager overallProgress = new SteppedProgressManager(); long totalDownloadSize = downloads.Sum(delegate(DownloadInfo download) { return(download.FileSize); }); foreach (DownloadInfo download in downloads) { ProgressManagerBase downloadProgress = null; ProgressChangedEventHandler localHandler = delegate(object sender2, ProgressChangedEventArgs e2) { DownloadInfo downloadInfo = (DownloadInfo)sender2; if (downloadProgress == null) { downloadProgress = e2.Progress; overallProgress.Steps.Add(new SteppedProgressManagerStep( e2.Progress, download.FileSize / (float)totalDownloadSize)); } downloader_ProgressChanged(sender2, new ProgressChangedEventArgs(overallProgress, e2.UserState)); }; download.Download(localHandler); } e.Result = e.Argument; }
private void UpdateProgress() { if (!task.Executing) { //The task is done! Bail out and let the completion handler reset the UI return; } //Get the name of the current erasure target to display the overall status SteppedProgressManager taskProgress = task.Progress; ErasureTargetProgressManagerStep taskStep = (ErasureTargetProgressManagerStep)taskProgress.CurrentStep; if (taskStep == null) { return; } else if (!string.IsNullOrEmpty(taskStep.Name)) { status.Text = taskStep.Name; } else { status.Text = S._("Erasing..."); } //The get the current step of the target to set the current item name SteppedProgressManagerStepBase targetStep = (SteppedProgressManagerStepBase)taskStep.Target.Progress.CurrentStep; if (targetStep == null) { return; } else if (!string.IsNullOrEmpty(targetStep.Name)) { item.Text = WrapItemName(targetStep.Name); } //Determine if the tag information of the step's progress manager is an //object array or a string. ProgressManagerBase targetStepProgress = targetStep.Progress; { object tag = targetStepProgress.Tag; if (tag == null) { if (string.IsNullOrEmpty(targetStep.Name)) { item.Text = string.Empty; } } else if (tag.GetType() == typeof(string)) { item.Text = (string)tag; } else if (tag.GetType() == typeof(int[])) { pass.Text = S._("{0} out of {1}", ((int[])tag)[0], ((int[])tag)[1]); } } if (targetStepProgress.TimeLeft >= TimeSpan.Zero) { timeLeft.Text = S._("About {0} left", RoundToSeconds(targetStepProgress.TimeLeft)); } else { timeLeft.Text = S._("Unknown"); } if (!targetStepProgress.ProgressIndeterminate) { itemProgress.Style = ProgressBarStyle.Continuous; itemProgress.Value = (int)(targetStepProgress.Progress * 1000); itemProgressLbl.Text = targetStepProgress.Progress.ToString("#0%", CultureInfo.CurrentCulture); } else { itemProgress.Style = ProgressBarStyle.Marquee; itemProgressLbl.Text = string.Empty; } if (!taskProgress.ProgressIndeterminate) { overallProgress.Style = ProgressBarStyle.Continuous; overallProgress.Value = (int)(taskProgress.Progress * 1000); overallProgressLbl.Text = S._("Total: {0,2:#0.00%}", taskProgress.Progress); } else { overallProgress.Style = ProgressBarStyle.Marquee; overallProgressLbl.Text = S._("Total: Unknown"); } }