/// <summary> /// Initialization of the package; this method is called right after the package is sited, so this is the place /// where you can put all the initialization code that rely on services provided by VisualStudio. /// </summary> /// <param name="cancellationToken">A cancellation token to monitor for initialization cancellation, which can occur when VS is shutting down.</param> /// <param name="progress">A provider for progress updates.</param> /// <returns>A task representing the async work of package initialization, or an already completed task if there is none. Do not return null from this method.</returns> protected override async Task InitializeAsync(CancellationToken cancellationToken, IProgress <ServiceProgressData> progress) { // When initialized asynchronously, the current thread may be a background thread at this point. // Do any initialization that requires the UI thread after switching to the UI thread. await this.JoinableTaskFactory.SwitchToMainThreadAsync(cancellationToken); await PeasyMotionActivate.InitializeAsync(this).ConfigureAwait(true); await base.InitializeAsync(cancellationToken, progress); }
public static async Task InitializeAsync(AsyncPackage package) { // Switch to the main thread - the call to AddCommand in PeasyMotionActivate's constructor requires // the UI thread + we gona check if VsVim commands are available await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(package.DisposalToken); OleMenuCommandService commandService_ = await package.GetServiceAsync(typeof(IMenuCommandService)).ConfigureAwait(true) as OleMenuCommandService; IVsTextManager textManager = await package.GetServiceAsync(typeof(SVsTextManager), false).ConfigureAwait(true) as IVsTextManager; if (null == textManager) { ThrowAndLog(nameof(package) + ": failed to retrieve SVsTextManager"); } IComponentModel componentModel = await package.GetServiceAsync(typeof(SComponentModel)).ConfigureAwait(true) as IComponentModel; if (componentModel == null) { ThrowAndLog(nameof(package) + ": failed to retrieve SComponentModel"); } IVsEditorAdaptersFactoryService editor_ = componentModel.GetService <IVsEditorAdaptersFactoryService>(); if (editor_ == null) { ThrowAndLog(nameof(package) + ": failed to retrieve IVsEditorAdaptersFactoryService"); } ITextSearchService textSearchService_ = componentModel.GetService <ITextSearchService>(); if (textSearchService_ == null) { ThrowAndLog(nameof(package) + ": failed to retrieve ITextSearchService"); } ITextStructureNavigatorSelectorService textStructureNavigatorSelector_ = componentModel.GetService <ITextStructureNavigatorSelectorService>(); if (textStructureNavigatorSelector_ == null) { ThrowAndLog(nameof(package) + ": failed to retrieve ITextStructureNavigatorSelectorService"); } IVsStatusbar statusBar = await package.GetServiceAsync(typeof(SVsStatusbar)).ConfigureAwait(true) as IVsStatusbar; InfoBarService.Initialize(package); Instance = new PeasyMotionActivate() { pkg = package, commandService = commandService_, textMgr = textManager, editor = editor_, textSearchService = textSearchService_, statusBar = statusBar, textStructureNavigatorSelector = textStructureNavigatorSelector_, }; Instance.Init(); }