2009-08-24 20 views
5

Tengo una pregunta sobre el manejo de eventos con C#. Escucho los eventos que lanza una clase A. Ahora cuando se lanza el evento, se ejecuta un método que hace algo. Este método a veces tiene que esperar las respuestas de las fuentes de datos o similares.Manejo de eventos roscados (C#)

Creo que el manejo de eventos es sincrónico, por lo que uno tras otro evento será procesado. ¿Es posible hacerlo asíncrono? Quiero decir que cuando el método se ejecuta pero tiene que esperar la respuesta del origen de datos, ¿se puede procesar otro evento?

Gracias de antemano

Sebastián

Respuesta

11

supongo que puede generar el código que tiene que esperar en un nuevo hilo. Esto provocaría que el controlador de eventos no bloquee el hilo sobre el que se generan los eventos, de modo que pueda invocar al siguiente controlador de eventos en línea. (C# 3.5 muestra)

private void MyPotentiallyLongRunningEventHandler(object sender, SomeEventArgs e) 
{ 
    ThreadPool.QueueUserWorkItem((state) => { 
     // do something that potentially takes time 

     // do something to update state somewhere with the new data 
    }); 
} 
+0

¿Qué pasa si los argumentos (SomeEventArgs) contienen algún parámetro de salida? El método no puede salir hasta que se hayan calculado los parámetros de salida ... He publicado una pregunta relacionada aquí: http://stackoverflow.com/questions/6453655/parallel-event-handling-in-c/6453701#6453701 –

2

simple, crear un hilo en el controlador de eventos y hacer toda la lógica allí. Es mejor utilizar el grupo de subprocesos para que el número de subprocesos sea limitado.

+0

Creación de un el hilo no es barato, por lo que probablemente no sea una buena idea para un manejador de eventos, pero podrías usar el grupo de hilos como dices. –

+0

No creo que el grupo de subprocesos siempre tenga hilos precreados, creo que los creará las primeras veces, así que pagará ese costo de todos modos. – vava

Cuestiones relacionadas