Posts

Posts uit mei, 2010 tonen

C# Invoke, BeginInvoke, InvokeRequired

Afbeelding
Controls kunnen op twee manieren worden gemanipuleerd vanuit een andere thread, namelijk: Invoke() BeginInvoke() Waarom is het niet mogelijk om direct controls te manipuleren vanuit een andere thread? Dat is de vraag die centraal staat voor dit blog. Message queue en message pumping Elke Windows applicatie die wordt gemaakt is bij het opstarten voorzien van een thread. Deze thread roept de main method aan van de applicatie. GUI applicaties zijn event gebaseerd, wat inhoud dat er een entiteit moet bestaan om events af te vuren en te verwerken. Windows doet dit door een message queue aan te maken voor de applicatie. Alle UI gerelateerde acties worden vertaald naar messages die worden doorgestuurd naar de message queue. Nu is er nog iets nodig die deze messages van de queue leest en de geschikte event handlers aanroept. Dit gebeurt door de message pump. De message pump is in principe een loop die wacht totdat iemand een message op de queue plaatst. Zodra iemand dit doet, haalt de pump de