2009-09-01 13 views
5

Tengo una aplicación Windows Form en C# y estoy tratando de averiguar dónde implementaría la aplicación CLI equivalente al ciclo while primario en main(). Estoy usando el diseñador de gui de Visual C#.El bucle principal de la GUI de Windows en C# ... ¿dónde está?

EDITAR: Problema resuelto con una instancia de Timer.

+3

Sospecho que estás pensando en esto en el nivel equivocado. También podría estar preguntando "en qué parte de mi programa C#" los datos de algún polígono se mueven a la GPU por algún bus. Esas ideas no son conceptos en el lenguaje C#, son detalles de implementación que las bibliotecas, los lenguajes y el tiempo de ejecución extraen para usted. El objetivo de los formularios de Windows en C# es garantizar que nunca más tenga que pensar en los bucles de mensajes. Sí, los programas basados ​​en eventos están construidos con mensajes de Windows; a veces la abstracción tiene filtraciones, pero no debería necesitar hablar directamente en el nivel del mensaje en la mayoría de los casos normales. –

+0

@Orm: el ejemplo al que se ha vinculado es un código muy mal escrito. Si lo usa, le recomiendo que lo use como referencia para saber qué evitar. –

+0

Lo soy, y sí, esta es una manera horrible de hacerlo. Lo intenté, y no funcionó nada bien. – Orm

Respuesta

13

Está dentro del método Application.Run. No debe llamar a la función API directamente GetMessage:

// MyForm is derived from `System.Windows.Forms.Form` class 
Application.Run(new MyForm()); 
+0

No estoy seguro de dónde entra la información de API de GetMessage, aunque ... –

+0

sheepsimulator: ¿Qué quieres decir? Application.Run establece un bucle de mensaje. Internamente, llama a la función de API Win32 'GetMessage' en un bucle. –

+0

Pero entonces, ¿cómo agrego la lógica de mis programas? Por ejemplo, si quería que el programa imprimiera continuamente "¡Funciona!" a un widget (agregando texto que he descubierto, widget.Text + = "¡Funciona!";). – Orm

4

Se entra desde Application.Run(Form). No ingresas ninguna lógica en ese ciclo. Si necesita responder a una entrada, agregue manejadores de eventos a los eventos particulares a los controles en su formulario. Si necesita ejecutar la lógica periódicamente, use una de las clases Timer.

El principal resultado de la lógica en la bomba de mensajes en C++ es el uso excesivo/innecesario de la batería en las computadoras portátiles. Definitivamente debería comenzar a reconsiderar los requisitos del código real para cumplir su objetivo, y no deberían incluir la ejecución constante de la lógica en un ciclo de rotación.

+0

Muy bien, eso me ayuda un poco, pero ahora necesito saber cómo agregar la lógica de mis programas a ese ciclo. Eso es lo que trato de descubrir. – Orm

+0

No es así. Agrega la lógica de su programa a los manejadores de eventos. – Eclipse

0

intente leer this. El lenguaje no es demasiado claro, y el código es VB, pero debe transmitir el punto.

Cuestiones relacionadas