예제 #1
0
 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);
 }
예제 #2
0
 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);
 }
예제 #3
0
        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);
        }
예제 #4
0
        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);
            }
        }