internal static AnimationControler.AnimePacket AnimeCustomPacket(string queueName, int sleepTime, CustomAnimeHandler method, int maxIteration, bool queue, int queueLevel, object qOwner, AnimationControler.FinalCallback finalCallback) { CustomThreadParam baseThreadParam = new CustomThreadParam(); baseThreadParam.time = sleepTime; baseThreadParam.customMethod = method; baseThreadParam.MaxIteration = maxIteration; baseThreadParam.QueueLevel = queueLevel; baseThreadParam.finalCallback = finalCallback; baseThreadParam.queueName = queueName; return new AnimationControler.AnimePacket() { isQueue = queue && queueLevel >= 0, queueOwner = qOwner, method = Custom, threadParam = baseThreadParam }; }
private static void Custom(object customThreadParam) { CustomThreadParam td = (CustomThreadParam) customThreadParam; try { if (td.MaxIteration <= 0) return; int i = 0; while (!td.animatorState.Canceled) { CustomObjectMethod(td.control, td.animatorState, td.customMethod); i++; if (i >= td.MaxIteration && td.MaxIteration > 0) break; Thread.Sleep(td.time); } } finally { td.controlState.AnimatorEnd(td.animatorState); } }