1

我需要创建一个基于队列的系统,其中多个线程将添加要由队列处理的操作。

听起来很简单,但我的动作将是异步的(带有动画),所以我不想在前一个动作的动画完成之前开始队列中的下一个动作。

我怎么能这样做?

4

1 回答 1

2

您可以使用方法和事件创建IAction接口。ExecuteCompleted

然后,您可以为当前项目创建一个IActions 和 pop队列以及处理程序中Execute的下一个Completed项目。

您甚至可以创建一个yield returns的迭代器方法,并在每次完成后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();
    ...
}
于 2010-11-17T01:44:50.960 回答