private async void TestChallenge_Click(object sender, EventArgs e) { if (ItemViewModel.IsTestInProgress) { ShowTestResultsUI(); return; } // validate and save before test if (!await ValidateAndSave(ItemViewModel.SelectedItem)) { return; } var challengeConfig = ItemViewModel.SelectedItem.GetChallengeConfig(null); if (challengeConfig.ChallengeType == SupportedChallengeTypes.CHALLENGE_TYPE_HTTP && !String.IsNullOrEmpty(ItemViewModel.SelectedItem.ServerSiteId) && !AppViewModel.IsIISAvailable) { MessageBox.Show(SR.ManagedCertificateSettings_CannotChallengeWithoutIIS, SR.ChallengeError, MessageBoxButton.OK, MessageBoxImage.Error); } else if (challengeConfig.ChallengeType != null) { ItemViewModel.IsTestInProgress = true; Button_TestChallenge.IsEnabled = false; try { ItemViewModel.UpdateManagedCertificateSettings(); } catch (Exception exp) { // usual failure is that primary domain is not set Button_TestChallenge.IsEnabled = true; ItemViewModel.IsTestInProgress = false; MessageBox.Show(exp.Message); return; } ItemViewModel.ConfigCheckResults = new System.Collections.ObjectModel.ObservableCollection <StatusMessage> { new StatusMessage { IsOK = true, Message = "Testing in progress.." } }; AppViewModel.ClearRequestProgressResults(); ShowTestResultsUI(); // begin listening for progress info AppViewModel.TrackProgress(ItemViewModel.SelectedItem); var results = await ItemViewModel.TestChallengeResponse(ItemViewModel.SelectedItem); ItemViewModel.ConfigCheckResults = new System.Collections.ObjectModel.ObservableCollection <StatusMessage>(results); ItemViewModel.RaisePropertyChangedEvent(nameof(ItemViewModel.ConfigCheckResults)); //TODO: just use viewmodel to determine if test button should be enabled Button_TestChallenge.IsEnabled = true; ItemViewModel.IsTestInProgress = false; } }