private void RunUpgrade() { var strategy = UserUpgradeStrategy.Create(); if (strategy == null) { return; } if (strategy.TotalSteps < 5 || null == (_dialogView = CreateDialog())) { strategy.Run(); return; } var task = new BackgroundTask( delegate(IBackgroundTaskContext context) { strategy.ProgressChanged += (sender, e) => context.ReportProgress(new BackgroundTaskProgress(strategy.CurrentStep - 1, strategy.TotalSteps, String.Empty)); strategy.Run(); context.Complete(); }, false, strategy); task.ProgressUpdated += (sender, e) => _dialogView.SetProgressPercent(e.Progress.Percent); task.Terminated += (sender, e) => _dialogView.Close(strategy.FailedCount > 0 ? SR.MessageUserUpgradeFailures : null); task.Run(); _dialogView.RunModal(SR.TitleUpdatingPreferences, SR.MessageUpdatingPreferences); task.Dispose(); }