public void SetEvaluator(string id) { if (_evaluatorId == id && _evaluator != null) { return; } IInteractiveEvaluator eval = null; try { eval = string.IsNullOrEmpty(id) ? null : _providers.Select(p => p.GetEvaluator(id)).FirstOrDefault(e => e != null); } catch (NoInterpretersException ex) { _window.WriteErrorLine(ex.Message); } catch (MissingInterpreterException ex) { _window.WriteErrorLine(ex.Message); } catch (DirectoryNotFoundException ex) { _window.WriteErrorLine(ex.Message); } catch (Exception ex) when(!ex.IsCriticalException()) { _window.WriteErrorLine(ex.ToUnhandledExceptionMessage(GetType())); } var oldEval = _evaluator; _evaluator = null; if (oldEval != null) { DetachWindow(oldEval); DetachMultipleScopeHandling(oldEval); oldEval.Dispose(); } _evaluator = eval; _evaluatorId = id; if (eval != null) { eval.CurrentWindow = CurrentWindow; if (eval.CurrentWindow != null) { // Otherwise, we'll initialize when the window is set DoInitializeAsync(eval).DoNotWait(); } } UpdateCaption(); PersistEvaluator(); EvaluatorChanged?.Invoke(this, EventArgs.Empty); AttachMultipleScopeHandling(eval); }