2010-06-13 9 views
5

Ich dachte, dass WinForms Klassen wie jede andere Klasse sind. Aber das Start-Formular-Projekt bringt mich durcheinander. Warum beginnen neue Formulare mit Application.Run und welche Art von Mechanismus passiert darin?Was Application.Run() tut?

Antwort

12

Wie es in der documentation heißt, beginnt es, eine Standard-Anwendungsnachrichtenschleife auf dem aktuellen Thread auszuführen. Die Nachrichtenschleife verarbeitet Klicks, Tastendrücke, Malanforderungen und viele andere Dinge.

Bei Aufruf with a form as an argument wird diese Form auch sichtbar gemacht.

+0

Application.Run funktioniert wie eine Brücke zwischen OS und Form-Klasse? Aber wie funktioniert der Hintergrundmechanismus? Application.Run verwendet einige Methoden der Form classes (send messages arguments)? – Freshblood

+0

Normalerweise erwartete ich, dass Form seine eigenen Jobs nativ ausführt, aber es sieht so aus, dass es einige Jobs für Application.Run gibt. – Freshblood

+2

Eine typische Form tut nichts, bis ein Event ausgelöst wird. Ohne die Nachrichtenschleife würden die Ereignisse nicht erhöht, so dass nichts passieren würde. Versuchen Sie, ein Formular anzuzeigen, ohne 'Application.Run (form);' aufzurufen. Das Formular wird angezeigt, es reagiert jedoch nicht mehr. Es malt nicht einmal richtig. Das Gleiche passiert, wenn Sie in einem Event-Handler blockierenden Code schreiben. Wenn Sie den Haupt-Thread blockieren, verhindern Sie, dass die Nachrichtenschleife ausgeführt wird, sodass Ihr Formular keine weiteren Ereignisse mehr empfängt. –

4

Dies geht zurück auf die Win32 API. Winforms sitzt auf der Win32 API. Application.Run() verbindet Ihr Programm mit dem win32 message loop. Ziemlich viele Maus- und Tastaturereignisse (und die meisten anderen vom Benutzer initiierten Ereignisse) sind wirklich Win32-Nachrichten.