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();
        }