Мне очень стыдно задавать такой тривиальный вопрос, но отладка некоторых программ теперь убедила меня, что я не совсем понимаю эту проблему:
Как работают события .NET с высоты 20 000 футов? Я не имею в виду шаблон обработчика делегата / события и все это. Что я имею в виду - что такое БОЛЬШАЯ картинка:
- Код А что-то делает.
- Произошел некоторый внешний триггер. Скажем, например, что пользователь нажал на какой-то элемент управления.
- происходит волшебство и вызывается обработчик события.
- другое волшебство происходит после того, как обработчик события возвращается.
Теперь, что такое магия? Как это относится к темам? Поток, выполняющий мой код, прерывается при возникновении события, а затем возобновляется после возврата обработчика события? Но я погуглил и обнаружил , что обработчики .NET вызываются синхронно в исходном потоке. Так кто же позаботится о том, чтобы остановить и возобновить код А? Что происходит, если события вложены (то есть событие 2 происходит, когда выполняется обработчик события для события 1)?
Редактировать : Насколько я понимаю, в ответах говорится, что механизм события для события next будет запущен только после завершения текущего работающего обработчика события. Это означает, что ваш код не прерывается: строка n всегда будет выполняться сразу после строки n-1 и непосредственно перед строкой n + 1. Однако непосредственно перед тем, как опубликовать вопрос, я отлаживал программу, управляющую с помощью автоматизации Internet Explorer (используя SWExplorerAutomation от Webius). Я совершенно уверен, что, когда я проходил по коду, я был «похищен» :-) некоторым обработчиком событий и вернулся в прерванную позицию в коде, как только этот обработчик завершил свою работу. Это означает, что либо вы не понимаете ответы, либо программа ведет себя по-разному, проходя через отладчик!