/// <summary> /// Adds a handler that is called every time this resource is loaded. If the resource /// is loaded at the time this handler is added, the handler is called immediately /// To prevent deadlock, these handlers should not trigger a load/unload of the resource /// </summary> /// <param name="handler"></param> public void AddResourceEventListener(IResourceEventListener listener) { // Prevent modification of loading status while doing this check bool listenLoad = false; bool listenUnload = false; lock (HandlerLock) { if (IsLoaded) { listenLoad = true; } if (!IsLoaded) { listenUnload = true; } EventListeners.Add(new WeakReference <IResourceEventListener>(listener)); } if (listenLoad) { listener.OnResourceLoaded(this); } if (listenUnload) { listener.OnResourceUnloaded(this); } }
public void RegisterListener(IResourceEventListener listener) { if (listeners == null) { listeners = new List <IResourceEventListener>(); } listeners.Add(listener); }
public void UnregisterListener(IResourceEventListener listener) { listeners.Remove(listener); }