Мне очень неловко задавать такой тривиальный вопрос, но отладка какого-то программного обеспечения теперь убедила меня, что я действительно не понимаю эту проблему:Асинхронные и .NET-события?
Каким образом события .NET работают с высоты 20 000 футов? Я не имею в виду шаблон обработчика делегата/события и все такое. Что я имею в виду - что такое БОЛЬШОЕ изображение:
- Код А что-то делает.
- Выполняется некоторый внешний триггер. Скажем, например, что пользователь нажал на какой-то элемент управления.
- Магия происходит и обработчик события для события.
- другой магия бывает после этого обработчик события возвращается.
Теперь, что такое магия? Как это связано с потоками? Является ли поток, выполняющий мой код прерванным при возникновении события, а затем возобновляется после возврата обработчика события? Но я googled и found out, что обработчики .NET называются синхронно в исходном потоке. Итак, кто заботится о прекращении и возобновлении кода А? Что произойдет, если события вложены (т. Е. Событие 2 происходит, когда обработчик события для события 1 запущен)?
Редактировать: Насколько я понимаю, ответы говорят о том, что левши событие для следующего случае будет работать только после того, как закончит работу в настоящее время работает обработчик событий. Это означает, что ваш код не прерывается: строка n всегда запускается сразу же после строки n-1 и непосредственно перед строкой n + 1. Однако перед тем, как я опубликовал вопрос, я отлаживал программу, контролирующую, через автоматизацию, Internet Explorer (используя SWExplorerAutomation от Webius). Я совершенно уверен, что по мере того, как я выполнял штрихование кода, я был «похищен» :-) для какого-либо обработчика событий и вернулся к прерванной позиции в коде после того, как обработчик событий завершил свою работу. Это означает, что либо не понимают ответы, либо что программа ведет себя по-разному, когда проходит через отладчик!
Это относится к приложениям WinForms, но не забывайте об общем случае, когда не задействован насос сообщений. В этом случае все работает синхронно без митигатора, и нет никакой магии. – bzlm
@bzim Я понимаю старые добрые почтовые ящики mulit-mailbox, wake-me-up-when-a-message-прибывает-if-I'm-with-a-high-priority-than-the-current-running-task-task например, в старом Intel RMX. То, что я не понимаю, - это ловкость ручной работы Windows. – Avi