2010-06-13 11 views
5

Estaba pensando que WinForms son clases como cualquier otra clase. Pero comenzar el proyecto me hace confundir. ¿Por qué el nuevo formulario comienza con Application.Run y ​​qué tipo de mecanismo ocurre dentro de él?¿Qué hace Application.Run()?

Respuesta

12

Como dice en el documentation, comienza a ejecutar un bucle de mensaje de aplicación estándar en el hilo actual. El bucle de mensajes maneja los clics, las pulsaciones de teclas, las solicitudes de pintura y muchas otras cosas.

Cuando se llama with a form as an argument, también hace que esa forma sea visible.

+0

Application.Run funciona como un puente entre el sistema operativo y la clase Form? Pero, ¿cómo funciona el mecanismo de fondo? Aplicación. Ejecutar algunos métodos de clase de formulario (enviar argumentos de mensajes)? – Freshblood

+0

Normalmente, esperaba que Form haga sus propios trabajos de forma nativa, pero parece que deja algunos trabajos para Application.Run – Freshblood

+2

Una forma típica no hace nada hasta que se produce un evento. Sin el ciclo de mensajes, los eventos no se generarían, por lo que no pasaría nada. Intenta mostrar un formulario sin llamar a 'Application.Run (form);'. El formulario aparecerá pero no responderá por completo. Ni siquiera pinta correctamente. Lo mismo ocurre si escribe código de bloqueo en un controlador de eventos: si bloquea el hilo principal, evita que se ejecute el bucle de mensajes para que su formulario no reciba más eventos. –

4

Esto se remonta al Win32 API. Winforms se encuentra en la parte superior de la API de Win32. Application.Run() conecta su programa en (implementa) el win32 message loop. Casi todos los eventos de mouse y teclado (y casi todos los demás iniciados por el usuario) son realmente mensajes win32.