Estoy realmente avergonzado de hacer una pregunta tan trivial pero depurar algún software ahora me convenció de que realmente no entiendo este problema:Asincronía y eventos .NET?
¿Cómo funcionan los eventos .NET vistos desde una altitud de 20,000 pies? No me refiero al patrón de delegado/controlador de eventos y todo esto. Lo que quiero decir es: ¿cuál es la GRAN imagen:
- El código A está haciendo algo.
- Se produce algún disparo externo. Digamos, por ejemplo, que el usuario hizo clic en algún control.
- Ocurre una magia y se llama al controlador de eventos para el evento.
- sucede otra magia después de que el manejador de eventos regrese.
Ahora, ¿cuál es la magia? ¿Cómo se relaciona esto con los hilos? ¿El subproceso que ejecuta mi código se interrumpe cuando se produce el evento y luego se reanuda después de que el controlador de eventos devuelve? Pero busqué en Google y found out que los controladores .NET se llaman sincrónicamente en el hilo original. Entonces, ¿quién se ocupa de detener y reanudar el Código A? ¿Qué ocurre si los eventos están anidados (es decir, el Evento 2 ocurre cuando se está ejecutando el controlador de eventos para el Evento 1)?
Editar: Por lo que yo entiendo las respuestas dicen que el lanzador de eventos para el próximo evento se ejecutará sólo después de que el controlador de eventos actualmente en ejecución finaliza. Esto significa que su código no se interrumpe: la línea n siempre se ejecutará inmediatamente después de la línea n-1 y justo antes de la línea n + 1. Sin embargo, justo antes de publicar la pregunta, estaba depurando un programa que controlaba, a través de la automatización, Internet Explorer (usando SWExplorerAutomation de Webius). Estoy bastante seguro de que mientras estaba avanzando paso a paso por el código fui "secuestrado" :-) a algún controlador de eventos y volví a la posición interrumpida en el código una vez que ese controlador de eventos finalizó su tarea. Esto significa que o no comprende las respuestas, o que el programa se comporta de manera diferente mientras pasa por el depurador.
Esto es cierto para las aplicaciones de WinForms, pero no olvide el caso más general, donde no está involucrado el bombeo de mensajes. En este caso, todo se ejecuta sincrónicamente sin un mitigator, y no hay magia involucrada. – bzlm
@bzim Entiendo los buenos viejos mulit-mailboxes, wake-me-up-when-a-message-llega-si-estoy-con-una-mayor-prioridad-que-la-actual-ejecución-modelo de la tarea como en el buen viejo RMX de Intel. Lo que no entiendo es el truco de mano de Windows. – Avi