internal async Task InitAsync(TerminalScriptingObject scriptingObject, CancellationToken cancellationToken) { await this.package.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); var tcs = new TaskCompletionSource <object>(); void TerminalInitHandler(object sender, TermInitEventArgs e) => tcs.TrySetResult(null); scriptingObject.TerminalInit += TerminalInitHandler; try { VSColorTheme.ThemeChanged += VSColorTheme_ThemeChanged; this.terminalView.ScriptingObject = scriptingObject; string extensionDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); string rootPath = Path.Combine(extensionDirectory, "WebView\\default.html").Replace("\\\\", "\\"); this.terminalView.Navigate(new Uri(rootPath)); using (var registration = cancellationToken.Register(() => tcs.TrySetCanceled(cancellationToken))) { await tcs.Task; } } finally { scriptingObject.TerminalInit -= TerminalInitHandler; } if (this.pendingFocus) { this.terminalView.Invoke("triggerEvent", "focus"); this.pendingFocus = false; } }
internal Task InitAsync(TerminalScriptingObject scriptingObject, CancellationToken cancellationToken) => ((TermWindowControl)Content).InitAsync(scriptingObject, cancellationToken);