public void Detach(IEntityController controller) { if (_controllerAddQueue.Contains(controller)) { lock (_controllerAddQueue) { if (_controllerAddQueue.Contains(controller)) { _controllerAddQueue.Remove(controller); if (controller.Entity == this) { controller.Detach(); } } } } else if (_controllerRemoveQueue.Contains(controller)) { // Do nothing. } else if (_controllerList.Contains(controller)) { if (_isUpdating) { lock (_controllerRemoveQueue) { if (_controllerRemoveQueue.Contains(controller) == false) { _controllerRemoveQueue.Add(controller); if (controller.Entity == this) { controller.Detach(); } } } } else { lock (_controllerList) { _controllerList.Remove(controller); if (controller.Entity == this) { controller.Detach(); } } } } }