private void Worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { AssemblyAssetAggregator.ProviderWorker providerWorker = (AssemblyAssetAggregator.ProviderWorker)sender; providerWorker.RunWorkerCompleted -= new RunWorkerCompletedEventHandler(this.Worker_RunWorkerCompleted); if (this.workers == null) { return; } this.workers.Remove(providerWorker); }
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); }
private void OnWorkerDoWork(object sender, DoWorkEventArgs e) { AssemblyAssetAggregator.ProviderWorker providerWorker = sender as AssemblyAssetAggregator.ProviderWorker; providerWorker.DoWork -= new DoWorkEventHandler(this.OnWorkerDoWork); List <AssemblyAssetProvider> list = (List <AssemblyAssetProvider>)e.Argument; if (Enumerable.FirstOrDefault <AssemblyAssetProvider>((IEnumerable <AssemblyAssetProvider>)list) == null) { return; } AppDomain domain = AppDomain.CreateDomain("AssetToolDomain", (Evidence)null, new AppDomainSetup() { DisallowBindingRedirects = true }); try { using (ProjectPathHelper.TemporaryDirectory temporaryDirectory = new ProjectPathHelper.TemporaryDirectory()) { using (List <AssemblyAssetProvider> .Enumerator enumerator = list.GetEnumerator()) { while (enumerator.MoveNext()) { AssemblyAssetProvider provider = enumerator.Current; if (providerWorker.CancellationPending) { break; } if (!provider.AsynchronizedInitialize(domain, temporaryDirectory.Path, (IBackgroundWorkerWrapper)providerWorker)) { providerWorker.InvokeUIThread(DispatcherPriority.Background, (Action)(() => this.RemoveProvider((AssetProvider)provider))); } } } } } finally { AppDomain.Unload(domain); } }