Chciałbym wiedzieć, jak to jest możliwe, że funkcja C# Invoke można pracować (jestem teraz rozważa połączenie z wątku roboczego do wywołania metody, która manipuluje GUI z wątku GUI):Jak działa Invoke? Czy wątek nie ma tylko jednego wskaźnika instrukcji?
Przyjmijmy, mam dwa wątki, a każdy z nich ma wskaźnik inkrementacji, wskazując na aktualnie wykonywaną instrukcję.
Teraz wywołuję wywołanie w wątku roboczym, aby uruchomić delegata w wątku GUI. W jaki sposób jest to możliwe, gdy wątek GUI ma już wskaźnik instrukcji (IP), a każdy wątek może mieć tylko jeden? Co stanie się z tym adresem IP, gdy nagle wywołam mój kod? Jak to się robi, że wątek GUI może następnie kontynuować z tym, co robił (czy jego poprzedni adres IP zostanie w jakiś sposób przywrócony)?
Uogólnienie to pytanie, jak to się robi, gdy chcę wywołać funkcję f() z gwintem 1 w taki sposób, że f() jest wykonywana w kontekście jakiegoś drugiej wątku ...
Dziękuję za oświecenie :)!
Odpowiedź jest prawidłowa, ale aby być czystym, jest to komunikat okna, który jest wysyłany, aby po uruchomieniu pompy komunikatów wątków UI otrzymał komunikat i przetworzył go. – Lucero
W rzeczywistości środowisko wykonawcze jest w niektórych sytuacjach w stanie aktywnie uprzedzić działający wątek i zrobić to samo. Nie jestem pewien szczegółów; co najmniej jeden z nich wymaga wywołania śmieci, ale mogą istnieć inne. – Promit
Dziękuję wam obojgu - więc gdy docelowy wątek jest zajęty, metoda może zostać wywołana dopiero po zakończeniu przetwarzania wątku i rozpoczęciu przetwarzania wiadomości. A środkiem do tego jest komunikat Windows z parametrami delegatów w niektórych ładunkach. Dzięki, próbowałem odpowiedzieć w języku angielskim, ale wszędzie było "Tylko dodawaj Invoke, a wszystko będzie dobrze" samouczki ... –