Exemple #1
0
        internal void AddHighPriority(IContentOwner owner)
        {
            lock (sync)
            {
                if (manager == null)
                {
                    throw new ObjectDisposedException("this");
                }
                if (owner == null)
                {
                    throw new ArgumentNullException();
                }
                if (nullReferences.Count > 0)
                {
                    WeakReference wr = nullReferences.Pop();
                    wr.Target = owner;
                    highPriorityItems.Add(wr);
                }
                else
                {
                    highPriorityItems.Add(new WeakReference(owner));
                }

                if (created)
                {
                    owner.LoadContent(this, application.GetProtectedDrawState(service.GraphicsDevice), manager);
                }

                ProcessDelayed();
            }
        }
Exemple #2
0
        void CallLoad()
        {
            lock (sync)
            {
                if (buffer == null)
                {
                    buffer = new List <WeakReference>();
                }

                DrawState state = application.GetProtectedDrawState(service.GraphicsDevice);
                for (int i = 0; i < highPriorityItems.Count; i++)
                {
                    IContentOwner loader = highPriorityItems[i].Target as IContentOwner;
                    if (loader != null)
                    {
                        loader.LoadContent(this, state, manager);
                    }
                    else
                    {
                        nullReferences.Push(highPriorityItems[i]);
                        highPriorityItems.RemoveAt(i--);
                    }
                }

                foreach (WeakReference wr in items)
                {
                    IContentOwner loader = wr.Target as IContentOwner;
                    if (loader != null)
                    {
                        buffer.Add(wr);
                    }
                    else
                    {
                        nullReferences.Push(wr);
                    }
                }
                foreach (WeakReference wr in buffer)
                {
                    IContentOwner loader = wr.Target as IContentOwner;
                    if (loader != null)
                    {
                        loader.LoadContent(this, state, manager);
                    }
                }

                List <WeakReference> list = items;
                items  = buffer;
                buffer = list;

                buffer.Clear();

                ProcessDelayed();
            }
        }
Exemple #3
0
        /// <summary>
        /// Register an <see cref="IContentOwner"/> instance with this content manager
        /// </summary>
        /// <param name="owner"></param>
        public void Add(IContentOwner owner)
        {
            if (Monitor.TryEnter(sync))
            {
                try
                {
                    if (manager == null)
                    {
                        throw new ObjectDisposedException("this");
                    }
                    if (owner == null)
                    {
                        throw new ArgumentNullException();
                    }
                    if (nullReferences.Count > 0)
                    {
                        WeakReference wr = nullReferences.Pop();
                        wr.Target = owner;
                        items.Add(wr);
                    }
                    else
                    {
                        items.Add(new WeakReference(owner));
                    }

                    if (created)
                    {
                        owner.LoadContent(this, application.GetProtectedDrawState(service.GraphicsDevice), manager);
                    }
                }
                finally
                {
                    Monitor.Exit(sync);
                }
            }
            else
            {
                lock (delayedAddList)
                    delayedAddList.Add(owner);
            }
        }