Как запустить синхронизированную последовательность событий в потоке GUI в C#?

У меня есть приложение, которое должно выполнять следующие действия, предпочтительно в потоке GUI, поскольку именно там происходит большая часть действий и нет длительных операций:

Wait 1000
FuncA()
Wait 2000
FuncB()
Wait 1000
FuncC()

I понимаю, что я мог бы использовать таймер с функцией OnTick в стиле конечного автомата, но это кажется громоздким:

    int _state;
    void OnTick(object sender, EventArgs e) {
        switch (_state) {
            case 0:
                FuncA();
                _timer.Interval = TimeSpan.FromSeconds(2);
                _state = 1;
                break;
            case 1:
                FuncB();
                _timer.Interval = TimeSpan.FromSeconds(1);
                _state = 2;
                break;
            case 2:
                FuncC();
                _timer.IsEnabled = false;
                _state = 0;
        }
    }

Кроме того, я хотел бы иметь возможность сделать его достаточно общим, чтобы делать что-то вроде

RunSequenceOnGuiThread(new Sequence {
    {1000, FuncA}
    {2000, FuncB}
    {1000, FuncC}};

Есть ли идиоматический способ сделать такого рода вещи? Учитывая весь материал TPL, или Rx, или даже вычислительные выражения в F #, я бы предположил, что он существует, но я его не нахожу.

6
задан lobsterism 23 March 2012 в 19:19
поделиться