void addThreadCommand(ThreadCommandType command, bool topPriority, params object[] args) { ThreadCommand cmd = new ThreadCommand(); cmd.Type = command; cmd.Params = args; lock (threadCommands) { if (cmd.Type == ThreadCommandType.Stop) { foreach (ThreadCommand c in threadCommands) if (c.Type == ThreadCommandType.LoadTexture) (c.Params[0] as SceneNode).Drop(); threadCommands.Clear(); } if (topPriority && threadCommands.Count > 0) { ThreadCommand[] a = threadCommands.ToArray(); threadCommands.Clear(); threadCommands.Enqueue(cmd); for (int i = 0; i < a.Length; i++) threadCommands.Enqueue(a[i]); } else { threadCommands.Enqueue(cmd); } } }