Tengo una aplicación que tiene que hacer el siguiente tipo de cosas, de preferencia en el hilo de interfaz gráfica de usuario ya que es donde la mayor parte de la acción tiene lugar y no hay operaciones de marcha larga:¿Cómo se inicia una secuencia cronometrada de eventos en el hilo de la GUI en C#?
Wait 1000
FuncA()
Wait 2000
FuncB()
Wait 1000
FuncC()
realizo podría utilizar un temporizador con una función OnTick estilo de máquina de estados, pero que parece engorroso:
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;
}
}
Además me gustaría ser capaz de hacer que sea lo suficientemente genérico como para hacer algo así
RunSequenceOnGuiThread(new Sequence {
{1000, FuncA}
{2000, FuncB}
{1000, FuncC}};
¿Hay una manera idiomática de hacer este tipo de cosas? Dado todo el material de TPL, o Rx, o incluso las expresiones de cálculo en F #, asumiría que existe uno, pero no lo estoy encontrando.
Lo interfaz gráfica de usuario está utilizando? Winforms, WPF o algo más? – svick
WPF por ahora, pero me gustaría una solución (o al menos una técnica) que funcione en WinForms también. – lobsterism
Barra lateral: un cambio que haría, en todas las soluciones sugeridas, es utilizar TimeSpan en lugar de enteros para la demora. 1000 podría significar un segundo, 1000 segundos, etc. TimeSpan es inherentemente claro y no ambiguo. –