Создать очередь из MethodInvoker
Queue<MethodInvoker> EventCall = new Queue<MethodInvoker>();
Позже добавьте элементы в свою очередь
EventCall.Enqueue(ClearAllVals);
EventCall.Enqueue(saystuff);
EventCall.Enqueue(testFunc);
Затем вызывайте ваши функции по одному:
MethodInvoker bb = EventCall.Dequeue();
bb();
bb = EventCall.Dequeue();
bb();
bb = EventCall.Dequeue();
bb();
для безопасного вызова всех ваших функций (это также удалит их все из очереди, оставив очередь пустой и все вызванные функции)
public bool InvokeAll(){
MethodInvoker bb = null; // this will hold the function prior to use
for(int i = 0; i<EventCall.count; i++){
bb = EventCall.Dequeue(); //pull a method off of the queue
bb(); //call the method you pulled off of the queue
}
}
чтобы позвонить им всем, просто используйте InvokeAll();
или позвоните им один раз, когда захотите:
public bool NextEvent(){
MethodInvoker bb = null; // this will hold the function prior to use
if(EventCall.count > 0){
bb = EventCall.Dequeue(); //pull a method off of the queue
bb(); //call the method you pulled off of the queue
} else {
MessageBox.Show("there was no event to call"); // this is optional, point being you should be handeling the fact that there is no events left in some way.
}
}