示例#1
0
        private async Task InstallPackageAsync(IEnumerable <string>?assemblyNames)
        {
            try
            {
                IsLoading = true;
                _installCancellationTokenSource?.Cancel();
                _installCancellationTokenSource = new CancellationTokenSource();
                var identity = new PackageIdentity(_selectedPackage !.Value.Id, SelectedVersion !);

                var task = Task.Run(async() =>
                {
                    try
                    {
                        await _remotePackagesService.DownloadPackageAsync(identity, SelectedSource !, false, _installCancellationTokenSource.Token);
                    }
                    catch (TaskCanceledException)
                    {
                        return(true);
                    }

                    var assemblies = assemblyNames ?? (await _assembliesService.RequireAllAssembliesAsync()).Select(a => a.Name);
                    var framework  = _frameworkService.RequireCurrentFramework();
                    return(await _localPackagesService.InstallPackageAsync(identity, assemblies, framework));
                }, _installCancellationTokenSource.Token);

                var successInstall = await DialogHelper.ShowLoadingAsync("Installing", "Please wait while package installing...", task);

                if (successInstall)
                {
                    PackageInstalledOrRemoved?.Invoke();
                    await ChangeSelectedPackageRowAsync(_selectedPackage !.Value);
                }
                else
                {
                    DialogHelper.ShowErrorAlert($"Failed to install package {identity}");
                }
            }
            finally
            {
                IsLoading = false;
            }
        }