private void RegisterIcons(IEnumerable <ImageMoniker> icons) { lock (_knownIconsLock) { if (icons == null) { return; } icons = icons.Where(x => !KnownIcons.Contains(x)).ToList(); if (!icons.Any()) { return; } KnownIcons.AddRange(icons); } ThreadHelper.JoinableTaskFactory.Run(async() => { IVsImageService2 imageService = null; foreach (var icon in icons) { // register icon if (imageService == null) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); imageService = ServiceProvider.GetService <IVsImageService2, SVsImageService>(); } imageService.TryAssociateNameWithMoniker(GetIconStringName(icon), icon); } }); }
private void RegisterIcons(IEnumerable <ImageMoniker> icons) { Assumes.NotNull(icons); foreach (ImageMoniker icon in icons) { if (ThreadingTools.ApplyChangeOptimistically(ref _knownIcons, knownIcons => knownIcons.Add(icon))) { _imageService.TryAssociateNameWithMoniker(GetIconStringName(icon), icon); } } }
private void RegisterIcons(IEnumerable <ImageMoniker> icons) { Assumes.NotNull(icons); foreach (ImageMoniker icon in icons) { if (ImmutableInterlocked.Update(ref _knownIcons, (knownIcons, arg) => knownIcons.Add(arg), icon)) { _imageService.TryAssociateNameWithMoniker(GetIconStringName(icon), icon); } } }
private async Task RegisterSubTreeProviderAsync(IProjectDependenciesSubTreeProvider subTreeProvider, IGraphContext graphContext) { lock (_RegisteredSubTreeProvidersLock) { if (RegisteredSubTreeProviders.Contains(subTreeProvider.ProviderType)) { return; } RegisteredSubTreeProviders.Add(subTreeProvider.ProviderType); } var icons = subTreeProvider.Icons; if (icons == null) { return; } IVsImageService2 imageService = null; foreach (var icon in icons) { if (Images.Contains(icon)) { // already registered - next continue; } // register icon if (imageService == null) { await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync(); imageService = ServiceProvider.GetService <IVsImageService2, SVsImageService>(); } imageService.TryAssociateNameWithMoniker(GetIconStringName(icon), icon); Images.Add(icon); } }