Jestem naprawdę zakłopotany, aby zadać tak trywialne pytanie, ale debugowanie niektórych programów przekonało mnie teraz, że tak naprawdę nie rozumiem tego problemu:Zdarzenia asynchroniczne i .NET?
Jak działają zdarzenia .NET z wysokości 20 000 stóp? Nie mam na myśli wzorca obsługi delegata/zdarzenia i tego wszystkiego. Mam na myśli to - co jest DUŻYM obrazkiem:
- Kod A coś robi.
- Występuje pewien zewnętrzny wyzwalacz. Załóżmy na przykład, że użytkownik kliknął jakiś element sterujący.
- Magia się dzieje i wywoływana jest obsługa zdarzeń dla zdarzenia.
- Kolejna magia się dzieje po powrocie obsługi zdarzeń.
Co to jest magia? Jak to się ma do wątków? Czy wątek z uruchomionym kodem zostanie przerwany po wystąpieniu zdarzenia, a następnie wznawiany po powrocie programu obsługi zdarzeń? Ale ja googled i found out, że. Handlery .NET są nazywane synchronicznie w oryginalnym wątku. Więc kto zajmuje się zatrzymaniem i wznowieniem kodu A? Co się dzieje, gdy zdarzenia są zagnieżdżone (np. Zdarzenie 2 ma miejsce, gdy uruchomiona jest procedura obsługi zdarzeń dla zdarzenia 1)?
Edit: O ile mi zrozumieć odpowiedzi powiedzieć, że obsługi zdarzeń dla następnego imprezy będzie działać dopiero po zakończeniu aktualnie uruchomione obsługi zdarzeń. Oznacza to, że twój kod nie zostanie przerwany: linia n zawsze będzie działała natychmiast po linii n-1 i tuż przed linią n + 1. Jednak zanim opublikowałem pytanie, debugowałem program sterujący za pomocą automatyzacji programem Internet Explorer (przy użyciu SWExplorerAutomation z Webius). Jestem całkiem pewien, że kiedy przechodziłem linię kodu, zostałem "porwany" :-) do jakiejś obsługi zdarzenia i wróciłem do przerwanej pozycji w kodzie, gdy ten program obsługi zdarzeń zakończył swoją działalność. Oznacza to, że albo nie rozumiem odpowiedzi, albo że program zachowuje się inaczej, gdy przechodzi przez debugger!
Dotyczy to aplikacji WinForm, ale nie należy zapominać o bardziej ogólnym przypadku, w którym nie ma włączonej pompy komunikatów. W tym przypadku wszystko przebiega synchronicznie bez mitigatora i nie ma w tym magii. – bzlm
@bzim Rozumiem stare dobre mulit-mailboxes, model "przebudź-kiedy-wiadomość-przyjeżdża-jeśli-jestem-o-wyższym priorytecie niż-obecnie-działający-zadanie tak jak w starym dobrym RMXie Intela. To, czego nie rozumiem, to sztuczka systemu Windows. – Avi