2009-09-01 11 views
5

Ho un'app Windows Form in C# e sto cercando di capire dove implementare l'equivalente della CLI dell'app del ciclo while principale in main(). Sto usando l'interfaccia grafica di Visual C#.L'interfaccia utente principale di Windows in C# ... dove si trova?

MODIFICA: problema risolto con un'istanza di Timer.

+3

Ho il sospetto che tu stia pensando a questo al livello sbagliato. Si potrebbe anche chiedere "dove nel mio programma C#" i dati per alcuni poligoni vengono spostati sulla GPU su un bus. Queste idee non sono concetti in linguaggio C#, sono dettagli di implementazione che librerie, lingue e runtime si allontanano per te. L'intero punto dei form di Windows in C# è quello di assicurarti di non dover mai più pensare ai loop dei messaggi. Sì, i programmi basati su eventi sono costruiti con messaggi di Windows; a volte l'astrazione perde, ma non dovrebbe essere necessario parlare direttamente a livello di messaggio nei casi più comuni. –

+0

@Orm: l'esempio a cui ti sei collegato è un codice scritto male. Se lo usi, ti consiglio di usarlo come riferimento per cosa evitare. –

+0

Io sono, e sì questo è un modo schifoso per farlo. Ci ho provato, e non ha funzionato affatto. – Orm

risposta

13

È all'interno del metodo Application.Run. Non si dovrebbe chiamare GetMessage funzione API direttamente:

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

Non sai da dove arrivino le informazioni dell'API GetMessage, anche se ... –

+0

sheepsimulator: cosa intendi? Application.Run stabilisce un loop di messaggi. Internamente, chiama la funzione API Win32 'GetMessage' in un ciclo. –

+0

Ma allora come aggiungo la logica dei miei programmi al suo interno. Ad esempio, se volessi che il programma stampasse continuamente "Funziona!" a un widget (aggiungendo il testo che ho capito, widget.Text + = "Funziona!";). – Orm

4

E 'entrato da Application.Run(Form). Non si inserisce alcuna logica in quel ciclo. Se è necessario rispondere all'input, aggiungere i gestori di eventi agli eventi particolari ai controlli nel modulo. Se è necessario eseguire periodicamente la logica, utilizzare una delle classi Timer.

Il risultato primario della logica nella pompa di messaggio in C++ è l'utilizzo eccessivo/non necessario della batteria sui laptop. È assolutamente necessario iniziare a ripensare ai requisiti effettivi del codice per raggiungere l'obiettivo prefissato e non dovrebbero includere la logica in esecuzione costante in un ciclo di rotazione.

+0

Va bene, questo mi aiuta un po ', ma ora ho bisogno di sapere come aggiungere la logica dei miei programmi a quel ciclo. Questo è quello che sto cercando di capire. – Orm

+0

Non lo fai. Si aggiunge la logica del programma in gestori di eventi. – Eclipse

0

provare a leggere this. La lingua non è troppo chiara e il codice è VB, ma dovrebbe ottenere il punto.