Inheritance: System.Windows.Window
        public async Task InstallExtensions(IEnumerable <IExtensionModel> extensionModels)
        {
            bool hasInstalled = false;
            int  count        = extensionModels.Count();

            _progress = new InstallerProgress(count, $"Downloading and installing {count} extension(s)...");
            _progress.Show();

            await Task.Run(() =>
            {
                foreach (IExtensionModel model in extensionModels)
                {
                    try
                    {
                        GalleryEntry entry = _repository.CreateQuery <GalleryEntry>(includeTypeInQuery: false, includeSkuInQuery: true, searchSource: "ExtensionManagerUpdate")
                                             .Where(e => e.VsixID == model.ProductId)
                                             .AsEnumerable()
                                             .FirstOrDefault();

                        if (!_progress.IsVisible)
                        {
                            break;
                        }

                        if (entry != null)
                        {
                            IInstallableExtension installable = _repository.Download(entry);

                            if (!_progress.IsVisible)
                            {
                                break;
                            }

                            _manager.Install(installable, false);
                            hasInstalled = true;

                            var props = new Dictionary <string, string> {
                                { "extension", model.Name }
                            };
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Log(ex);
                    }
                }
            });

            if (_progress.IsVisible)
            {
                _progress.Close();
                _progress = null;
            }

            if (hasInstalled)
            {
                PromptForRestart();
            }
        }
        public async Task InstallExtensions(IEnumerable<IExtensionModel> extensionModels)
        {
            bool hasInstalled = false;
            int count = extensionModels.Count();

            _progress = new InstallerProgress(count, $"Downloading and installing {count} extension(s)...");
            _progress.Show();

            await Task.Run(() =>
            {
                foreach (IExtensionModel model in extensionModels)
                {
                    try
                    {
                        GalleryEntry entry = _repository.CreateQuery<GalleryEntry>(includeTypeInQuery: false, includeSkuInQuery: true, searchSource: "ExtensionManagerUpdate")
                                                                 .Where(e => e.VsixID == model.ProductId)
                                                                 .AsEnumerable()
                                                                 .FirstOrDefault();

                        if (!_progress.IsVisible)
                            break;

                        if (entry != null)
                        {
                            IInstallableExtension installable = _repository.Download(entry);

                            if (!_progress.IsVisible)
                                break;

                            _manager.Install(installable, false);
                            hasInstalled = true;

                            var props = new Dictionary<string, string> { { "extension", model.Name } };
                        }
                    }
                    catch (Exception ex)
                    {
                        Logger.Log(ex);
                    }
                }
            });

            if (_progress.IsVisible)
            {
                _progress.Close();
                _progress = null;
            }

            if (hasInstalled)
                PromptForRestart();
        }