private void ProviderCache_Disposing(object sender, EventArgs e) { AssemblyAssetAggregator.ProviderCache providerCache = (AssemblyAssetAggregator.ProviderCache)sender; providerCache.Disposing -= new EventHandler(this.ProviderCache_Disposing); AssemblyAssetAggregator.ProviderWorker providerWorker = Enumerable.FirstOrDefault <AssemblyAssetAggregator.ProviderWorker>((IEnumerable <AssemblyAssetAggregator.ProviderWorker>) this.workers, (Func <AssemblyAssetAggregator.ProviderWorker, bool>)(w => w.ProviderCache == providerCache)); if (providerWorker == null) { return; } providerWorker.Cancel(); this.workers.Remove(providerWorker); }
private void RegisterAssemblies() { if (this.activeProject == null) { return; } List <AssemblyAssetProvider> list1; if (this.cachedProjectProviders.TryGetValue(this.activeProject, out list1)) { foreach (AssetProvider provider in list1) { this.AddProvider(provider); } } else { list1 = new List <AssemblyAssetProvider>(); foreach (IAssembly assembly in (IEnumerable <IAssembly>) this.activeProject.AssemblyReferences) { string name = assembly.Name; if (!assembly.IsResolvedImplicitAssembly && string.Compare(name, "System", StringComparison.OrdinalIgnoreCase) != 0 && (string.Compare(name, "System.Core", StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(name, "mscorlib", StringComparison.OrdinalIgnoreCase) != 0) && (string.Compare(name, "System.Data", StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(name, "System.Xml", StringComparison.OrdinalIgnoreCase) != 0 && (string.Compare(name, "WindowsBase", StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(name, "System.Xml.Linq", StringComparison.OrdinalIgnoreCase) != 0)) && (string.Compare(name, "System.Xaml", StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(name, "System.Data.DataSetExtensions", StringComparison.OrdinalIgnoreCase) != 0 && string.Compare(name, "System.Activities", StringComparison.OrdinalIgnoreCase) != 0)) { bool isMainAssembly = assembly.Equals((object)this.activeProject.ProjectAssembly); AssemblyAssetProvider assemblyAssetProvider = new AssemblyAssetProvider(this.activeProject, assembly, isMainAssembly); this.AddProvider((AssetProvider)assemblyAssetProvider); list1.Add(assemblyAssetProvider); } } this.cachedProjectProviders.Add(this.activeProject, list1); } Tuple <List <AssemblyAssetProvider>, AssemblyAssetAggregator.ProviderCache> tuple = this.BuildGlobalProviders(); List <AssemblyAssetProvider> list2 = tuple.Item1; AssemblyAssetAggregator.ProviderCache providerCache = tuple.Item2; if (!AssemblyAssetAggregator.UseThreads || !EnumerableExtensions.CountIsMoreThan <AssemblyAssetProvider>((IEnumerable <AssemblyAssetProvider>)list2, 0)) { return; } AssemblyAssetAggregator.ProviderWorker providerWorker = new AssemblyAssetAggregator.ProviderWorker(providerCache); providerWorker.DoWork += new DoWorkEventHandler(this.OnWorkerDoWork); providerWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(this.Worker_RunWorkerCompleted); this.workers.Add(providerWorker); providerWorker.RunWorkerAsync((object)list2); }
public void Cancel() { this.CancelAsync(); this.UIThreadDispatcher = (UIThreadDispatcher)null; this.ProviderCache = (AssemblyAssetAggregator.ProviderCache)null; }
public ProviderWorker(AssemblyAssetAggregator.ProviderCache providerCache) { this.ProviderCache = providerCache; this.WorkerSupportsCancellation = true; this.UIThreadDispatcher = UIThreadDispatcher.Instance; }
private Tuple <List <AssemblyAssetProvider>, AssemblyAssetAggregator.ProviderCache> BuildGlobalProviders() { HashSet <string> hashSet1 = new HashSet <string>(); foreach (IAssembly assembly in (IEnumerable <IAssembly>) this.activeProject.AssemblyReferences) { if (assembly.IsLoaded && !assembly.IsResolvedImplicitAssembly) { hashSet1.Add(assembly.Name); } } AssemblyAssetAggregator.ProviderCache providerCache = (AssemblyAssetAggregator.ProviderCache) this.activeProject.Platform.Metadata.GetPlatformCache(DesignSurfacePlatformCaches.AssemblyAssetProviders); List <AssemblyAssetProvider> list = new List <AssemblyAssetProvider>(); if (providerCache != null) { foreach (AssemblyAssetProvider assemblyAssetProvider in (List <AssemblyAssetProvider>)providerCache) { if (!hashSet1.Contains(assemblyAssetProvider.AssemblyName)) { this.AddProvider((AssetProvider)assemblyAssetProvider); EnumerableExtensions.ForEach <TypeAsset>(Enumerable.OfType <TypeAsset>((IEnumerable)assemblyAssetProvider.Assets), (Action <TypeAsset>)(asset => asset.OnProjectChanged())); } } } else { providerCache = new AssemblyAssetAggregator.ProviderCache(); providerCache.Disposing += new EventHandler(this.ProviderCache_Disposing); foreach (string path in new HashSet <string>(BlendSdkHelper.GetExtensionDirectories(this.activeProject.TargetFramework))) { string[] files = Directory.GetFiles(path, "*.dll"); HashSet <string> hashSet2 = new HashSet <string>(); foreach (string filename in files) { foreach (string str in AssemblyAssetAggregator.GetDesignFileNames(filename, true)) { hashSet2.Add(str); } } foreach (string filename in files) { if (!hashSet2.Contains(filename.ToUpperInvariant())) { IAssemblyLoggingService assemblyLoggingService = (IAssemblyLoggingService)null; if (this.designerContext.Services != null) { assemblyLoggingService = this.designerContext.Services.GetService <IAssemblyLoggingService>(); } AssemblyAssetProvider assemblyAssetProvider = new AssemblyAssetProvider(this.activeProject, assemblyLoggingService, filename); providerCache.Add(assemblyAssetProvider); list.Add(assemblyAssetProvider); this.AddProvider((AssetProvider)assemblyAssetProvider); } } } if (!AssetLibrary.DisableAsyncUpdateCache) { this.activeProject.Platform.Metadata.SetPlatformCache(DesignSurfacePlatformCaches.AssemblyAssetProviders, (object)providerCache); } } return(new Tuple <List <AssemblyAssetProvider>, AssemblyAssetAggregator.ProviderCache>(list, providerCache)); }