我需要创建一个基于队列的系统,其中多个线程将添加要由队列处理的操作。
听起来很简单,但我的动作将是异步的(带有动画),所以我不想在前一个动作的动画完成之前开始队列中的下一个动作。
我怎么能这样做?
我需要创建一个基于队列的系统,其中多个线程将添加要由队列处理的操作。
听起来很简单,但我的动作将是异步的(带有动画),所以我不想在前一个动作的动画完成之前开始队列中的下一个动作。
我怎么能这样做?
您可以使用方法和事件创建IAction
接口。Execute
Completed
然后,您可以为当前项目创建一个IAction
s 和 pop队列以及处理程序中Execute
的下一个Completed
项目。
您甚至可以创建一个yield return
s的迭代器方法,并在每次完成后IAction
进行队列调用。MoveNext()
IAction
编辑:例如:
class ActionEnumerator : IAction {
readonly IEnumerator<IAction> enumerator;
public ActionEnumerator(IEnumerator<IAction> enumerator) {
this.enumerator = enumerator;
}
public void Execute() {
//If the enumerator gives us another action,
//hook up its Completed event to continue the
//the chain, then execute it.
if (enumerator.MoveNext()) {
enumerator.Current.Completed += delegate { Execute(); };
enumerator.Current.Execute();
} else //If the enumerator didn't give us another action, we're finished.
OnCompleted();
}
}
IEnumerator<IAction> SomeMethod() {
...
yield return new SomeAction();
//This will only run after SomeAction finishes
...
yield return new OtherAction();
...
}