private void importFromTeamProjectButton_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                using (var dialog = new TeamProjectPicker(TeamProjectPickerMode.SingleProject, false))
                {
                    var result = dialog.ShowDialog(Application.Current.MainWindow.GetIWin32Window());
                    if (result == System.Windows.Forms.DialogResult.OK && dialog.SelectedProjects != null && dialog.SelectedProjects.Length > 0)
                    {
                        try
                        {
                            this.IsEnabled = false;

                            var teamProjectCollection = dialog.SelectedTeamProjectCollection;
                            var teamProject           = dialog.SelectedProjects.First();
                            var tfs     = TfsTeamProjectCollectionCache.GetTfsTeamProjectCollection(teamProjectCollection.Uri);
                            var store   = tfs.GetService <WorkItemStore>();
                            var project = store.Projects[teamProject.Name];

                            this.Configuration = WorkItemConfiguration.FromTeamProject(tfs, project);
                        }
                        finally
                        {
                            this.IsEnabled = true;
                        }
                    }
                }
            }
            catch (Exception exc)
            {
                ShowException(exc);
            }
        }
        private void Compare(object argument)
        {
            var teamProjectNames = this.SelectedTeamProjects.Select(p => p.Name).ToList();
            var sources          = this.ComparisonSources.ToList();
            var ignoreCase       = this.IgnoreCase;
            var task             = new ApplicationTask("Comparing work item configurations", teamProjectNames.Count, true);

            PublishStatus(new StatusEventArgs(task));
            var step   = 0;
            var worker = new BackgroundWorker();

            worker.DoWork += (sender, e) =>
            {
                var tfs   = GetSelectedTfsTeamProjectCollection();
                var store = tfs.GetService <WorkItemStore>();

                var results = new List <TeamProjectComparisonResult>();
                foreach (var teamProjectName in teamProjectNames)
                {
                    task.SetProgress(step++, string.Format(CultureInfo.CurrentCulture, "Processing Team Project \"{0}\"", teamProjectName));
                    try
                    {
                        var project = store.Projects[teamProjectName];
                        var target  = WorkItemConfiguration.FromTeamProject(tfs, project);

                        var sourceComparisonResults = new List <WorkItemConfigurationComparisonResult>();
                        foreach (var source in sources)
                        {
                            sourceComparisonResults.Add(WorkItemConfigurationComparer.Compare(this.SelectedTeamProjectCollection.TeamFoundationServer.MajorVersion, source, target, ignoreCase));
                        }
                        results.Add(new TeamProjectComparisonResult(teamProjectName, sourceComparisonResults));
                    }
                    catch (Exception exc)
                    {
                        task.SetWarning(string.Format(CultureInfo.CurrentCulture, "An error occurred while processing Team Project \"{0}\"", teamProjectName), exc);
                    }
                    if (task.IsCanceled)
                    {
                        task.Status = "Canceled";
                        break;
                    }
                }
                e.Result = results;
            };
            worker.RunWorkerCompleted += (sender, e) =>
            {
                if (e.Error != null)
                {
                    Logger.Log("An unexpected exception occurred while comparing work item configurations", e.Error);
                    task.SetError(e.Error);
                    task.SetComplete("An unexpected exception occurred");
                }
                else
                {
                    this.ComparisonResults = (ICollection <TeamProjectComparisonResult>)e.Result;
                    task.SetComplete("Done");
                }
            };
            worker.RunWorkerAsync();
        }