private async Task ShutdownAsync() { // we are shutting down, cancel any pending work. _cancellationTokenSource.Cancel(); await ThreadingContext.JoinableTaskFactory.SwitchToMainThreadAsync(); if (_priorityCommandTargetCookie != VSConstants.VSCOOKIE_NIL) { var priorityCommandTargetRegistrar = _serviceProvider.GetService <SVsRegisterPriorityCommandTarget, IVsRegisterPriorityCommandTarget>(); var cookie = _priorityCommandTargetCookie; _priorityCommandTargetCookie = VSConstants.VSCOOKIE_NIL; var hr = priorityCommandTargetRegistrar.UnregisterPriorityCommandTarget(cookie); if (ErrorHandler.Failed(hr)) { FatalError.ReportWithoutCrash(Marshal.GetExceptionForHR(hr)); } } if (_oleComponent != null) { _oleComponent.Dispose(); _oleComponent = null; } }
private void InitializeCore() { AssertIsForeground(); // Ensure one of the flights is enabled, otherwise bail _experimentationService = _workspace.Services.GetRequiredService <IExperimentationService>(); if (!_experimentationService.IsExperimentEnabled(ExternalFlightName) && !_experimentationService.IsExperimentEnabled(InternalFlightName)) { return; } var vsShell = _serviceProvider.GetService <SVsShell, IVsShell>(); var hr = vsShell.IsPackageInstalled(ReSharperPackageGuid, out var extensionEnabled); if (ErrorHandler.Failed(hr)) { FatalError.ReportWithoutCrash(Marshal.GetExceptionForHR(hr)); return; } _resharperExtensionInstalledAndEnabled = extensionEnabled != 0; if (_resharperExtensionInstalledAndEnabled) { // We need to monitor for suspend/resume commands, so create and install the command target and the modal callback. var priorityCommandTargetRegistrar = _serviceProvider.GetService <SVsRegisterPriorityCommandTarget, IVsRegisterPriorityCommandTarget>(); hr = priorityCommandTargetRegistrar.RegisterPriorityCommandTarget( dwReserved: 0 /* from docs must be 0 */, pCmdTrgt: this, pdwCookie: out _priorityCommandTargetCookie); if (ErrorHandler.Failed(hr)) { FatalError.ReportWithoutCrash(Marshal.GetExceptionForHR(hr)); return; } // Initialize the OleComponent to listen for modal changes (which will tell us when Tools->Options is closed) _oleComponent = OleComponent.CreateHostedComponent("Keybinding Reset Detector"); _oleComponent.ModalStateChanged += OnModalStateChanged; } // run it from background and fire and forget StartUpdateStateMachine(); }
public void Shutdown() { AssertIsForeground(); if (_priorityCommandTargetCookie != VSConstants.VSCOOKIE_NIL) { var priorityCommandTargetRegistrar = _serviceProvider.GetService <IVsRegisterPriorityCommandTarget, SVsRegisterPriorityCommandTarget>(); var cookie = _priorityCommandTargetCookie; _priorityCommandTargetCookie = VSConstants.VSCOOKIE_NIL; var hr = priorityCommandTargetRegistrar.UnregisterPriorityCommandTarget(cookie); if (ErrorHandler.Failed(hr)) { FatalError.ReportWithoutCrash(Marshal.GetExceptionForHR(hr)); } } if (_oleComponent != null) { _oleComponent.Dispose(); _oleComponent = null; } }