private void OnTaskUpdated() { SuspendLayout(); try { var uninstList = _currentTargetStatus.AllUninstallersList; // Show the walk away box if there are no running/waiting loud uninstallers and at least one quiet unistaller running/waiting if (_walkAwayBox == null && // There is at least one loud uninstaller uninstList.Any(x => !x.IsSilentPossible) && // There are no loud uninstallers running or waiting !uninstList.Any(x => !x.IsSilentPossible && (x.CurrentStatus == UninstallStatus.Waiting || x.CurrentStatus == UninstallStatus.Uninstalling)) && // There is at least one silent uninstaller running or waiting uninstList.Any(x => x.IsSilentPossible && (x.CurrentStatus == UninstallStatus.Waiting || x.CurrentStatus == UninstallStatus.Uninstalling))) { _walkAwayBox = MessageBoxes.CanWalkAwayInfo(this); Enabled = false; _walkAwayBox.FormClosed += (x1, y1) => Enabled = true; } buttonClose.Enabled = true; var progress = uninstList.Count(x => x.CurrentStatus != UninstallStatus.Waiting); var statusString = string.Join("; ", uninstList.Where(x1 => x1.CurrentStatus == UninstallStatus.Uninstalling) .Select(x2 => x2.UninstallerEntry.DisplayName) .ToArray()); label1.Text = string.Format(CultureInfo.CurrentCulture, "{0} {1}/{2}: {3}", Localisable.UninstallProgressWindow_Uninstalling, progress, uninstList.Count, statusString); buttonClose.Text = Buttons.ButtonCancel; progressBar1.Value = Math.Max(0, progress - 1); progressBar1.Style = ProgressBarStyle.Continuous; } catch { progressBar1.Style = ProgressBarStyle.Marquee; } ResumeLayout(); Refresh(); }