private async void Execute(QueuedNpmCommandInfo info) { IsExecutingCommand = true; INpmCommander cmdr = null; try { lock (_lock) { cmdr = _npmController.CreateNpmCommander(); cmdr.OutputLogged += commander_OutputLogged; cmdr.ErrorLogged += commander_ErrorLogged; cmdr.ExceptionLogged += commander_ExceptionLogged; cmdr.CommandCompleted += commander_CommandCompleted; _commander = cmdr; } if (info.IsFreeformArgumentCommand) { await cmdr.ExecuteNpmCommandAsync(info.Arguments); } else if (info.IsGlobalInstall) { await cmdr.InstallGlobalPackageByVersionAsync( info.Name, info.Version); } else { await cmdr.InstallPackageByVersionAsync( info.Name, info.Version, info.DependencyType, true); } } finally { lock (_lock) { _commander = null; if (null != cmdr) { cmdr.OutputLogged -= commander_OutputLogged; cmdr.ErrorLogged -= commander_ErrorLogged; cmdr.ExceptionLogged -= commander_ExceptionLogged; cmdr.CommandCompleted -= commander_CommandCompleted; } } } }