private static void SelectEnvAndExt(ToolWindow envs, string viewId, Type extension, int retries) { if (retries <= 0) { Debug.Fail("Failed to select environment/extension after multiple retries"); return; } var select = envs.IsLoaded ? envs.Environments.OfType <EnvironmentView>().FirstOrDefault(e => e.Configuration.Id == viewId) : null; if (select == null) { envs.Dispatcher.InvokeAsync(() => SelectEnvAndExt(envs, viewId, extension, retries - 1), DispatcherPriority.Background); return; } envs.OnViewSelected(select); var ext = select?.Extensions.FirstOrDefault(e => e != null && extension.IsEquivalentTo(e.GetType())); envs.Environments.MoveCurrentTo(select); if (ext != null) { var exts = envs.Extensions; if (exts != null && exts.Contains(ext)) { exts.MoveCurrentTo(ext); ((ext as IEnvironmentViewExtension)?.WpfObject as ICanFocus)?.Focus(); } } }