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);
                }
            });
        }
示例#2
0
        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);
                }
            }
        }
示例#4
0
        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);
            }
        }