private void SettingsViewModelPropertyChanged(object sender, PropertyChangedEventArgs e) { this.SettingDialogStatus = SettingDialogStatus.NotWorking; if (e.PropertyName == "ActiveProxy") { var newActiveProxy = this.proxyService.Proxies.First(x => x.ProxyName == settingsViewModel.ActiveProxy); if (newActiveProxy == null) { return; } this.SettingDialogStatus = SettingDialogStatus.InitiatingProxy; UpdateCommands(); var InitializationTask = Task.Factory.StartNew(() => { newActiveProxy.Initialize(); }); InitializationTask.ContinueWith(task => { this.SettingDialogStatus = SettingDialogStatus.InitiatingProxyFailed; }, CancellationToken.None, TaskContinuationOptions.OnlyOnFaulted, TaskScheduler.FromCurrentSynchronizationContext()); InitializationTask.ContinueWith(task => { if (this.settingActiveProxy != null) { RemoveWeakEventListener(this.settingActiveProxy, ActiveProxyPropertyChanged); RemoveWeakEventListener(this.settingActiveProxy.StateValues, StateValuesCollectionChanged); var settingView = this.settingActiveProxy.InitializeSettingDialog(); if (settingView != null) { this.views.Remove(settingView); } } this.settingActiveProxy = newActiveProxy; StateValuesCollectionChanged(null, null); if (this.settingActiveProxy != null) { AddWeakEventListener(this.settingActiveProxy, ActiveProxyPropertyChanged); AddWeakEventListener(this.settingActiveProxy.StateValues, StateValuesCollectionChanged); var settingView = this.settingActiveProxy.InitializeSettingDialog(); if (settingView != null) { this.views.Add(settingView); } } this.SettingDialogStatus = SettingDialogStatus.NotWorking; }, CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.FromCurrentSynchronizationContext()); } UpdateCommands(); }
private void SubmitSettingCommand() { if (this.SettingDialogStatus == SettingDialogStatus.ProxyBusy || this.SettingDialogStatus == SettingDialogStatus.ProxyCannotConnect || this.SettingDialogStatus == SettingDialogStatus.ProxyUnvalid) { this.settingActiveProxy.AfterCloseSettingDialog(true); this.proxyService.ActiveProxy = this.settingActiveProxy; Close(true); } this.SettingDialogStatus = SettingDialogStatus.ValidatingProxySettings; UpdateCommands(); Task.Factory.StartNew(() => { return(this.settingActiveProxy.ValidateBeforeCloseSettingDialog()); }) .ContinueWith(task => { switch (task.Result) { case SettingDialogValidateionResult.Busy: this.SettingDialogStatus = SettingDialogStatus.ProxyBusy; return(false); case SettingDialogValidateionResult.ConnectFailed: this.SettingDialogStatus = SettingDialogStatus.ProxyCannotConnect; return(false); case SettingDialogValidateionResult.UnValid: this.SettingDialogStatus = SettingDialogStatus.ProxyUnvalid; return(false); case SettingDialogValidateionResult.Valid: this.SettingDialogStatus = SettingDialogStatus.ProxyValid; return(true); } return(false); }, CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.FromCurrentSynchronizationContext()) .ContinueWith(task => { if (task.Result) { this.settingActiveProxy.AfterCloseSettingDialog(true); this.proxyService.ActiveProxy = this.settingActiveProxy; Close(true); } else { UpdateCommands(); } }, CancellationToken.None, TaskContinuationOptions.OnlyOnRanToCompletion, TaskScheduler.FromCurrentSynchronizationContext()); }
private void ActiveProxyPropertyChanged(object sender, PropertyChangedEventArgs e) { this.SettingDialogStatus = SettingDialogStatus.NotWorking; UpdateCommands(); }