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(); } }
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(); } }
/// <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); } }