2012-04-01 2 views
2

Der Benutzeroberflächenthread in Winforms ist dafür verantwortlich, die Nachrichtenpumpe auszuführen, indem er Application.Run aufruft. Mit Message Pump meine ich eine Endlosschleife, die Nachrichten aus der Warteschlange zieht.UI Thread beide laufende Nachricht Pumpe und ausführenden Code?

So jetzt ist meine Frage, wie kann der UI-Thread auch einen Block von Code ausführen, wenn ex. ein Click-Handler wird ausgelöst? Es sollte mit der Nachrichtenpumpe beschäftigt sein und den Code nicht ausführen können?

Antwort

2

Es dauert eine Weile, bis die Nachrichtenpumpe die Nachricht verarbeitet hat, da diese synchron von der Nachrichtenpumpe (über das Click-Ereignis) aufgerufen wird.

Aus diesem Grund kann teurer Code dazu führen, dass die Benutzeroberfläche hängen bleibt.

+1

Wenn also auf eine Schaltfläche geklickt wird, wird der Code im Ereignishandler als Nachricht an die Warteschlange gesendet? – ebb

+1

Die Windows-Nachricht für den Klick wird vom MP verarbeitet, Interna im WinForms-Code rufen das click-Ereignis auf, und alle Abonnenten dieses Ereignisses werden synchron ausgeführt - ein Klick-Handler ist ein solcher Abonnent. –

+0

Ah macht Sinn! - Aber sicherlich muss die Nachricht, die vom MP verarbeitet wird, irgendeine Art von Information darüber enthalten, welches Klickereignis aufgerufen werden sollte, da es möglicherweise auch ein Klickereignis für eine andere Schaltfläche gibt? – ebb