2012-01-20 9 views
11

Sto solo cominciando sviluppo .Net (C#) e sono imbattuto in un certo codice che mi ha un po 'confuso ....C# - Application.Run()

Se ho

Form myForm = new Form(); 

Cosa fa la seguente riga effettivamente fare:

Application.Run(myForm); 

lo fa essenzialmente fare la stessa cosa di myForm.ShowDialog() o myForm.Show() (che è quello che ho pensato, quando si esegue un modulo farà) ....

Ho sempre trovato che il MSDN è una risorsa scarsa per spiegare correttamente il materiale per i nuovi arrivati ​​

+0

Vedere [questa domanda] (http://stackoverflow.com/questions/5200292/application-runform-vs-form-show) – nickd

risposta

15

Application.Run(myForm); fa che forma visibile all'utente. È la prima forma che viene caricata in memoria. Ed esegue questo modulo in un ciclo di messaggi, in modo da ottenere tutti gli eventi utente.

Risposta breve:

Application.Run inizia l'esecuzione di un ciclo di messaggi dell'applicazione standard sul thread corrente.

lungo Risposta:

Application.Run causa l'applicazione delle finestre entra nel ciclo di messaggi all'interno di WinMain per elaborare varie finestre messaggi i messaggi del sistema operativo ad un ciclo di messaggi queue.The messaggio, "loop", fino alla sua riceve un Messaggio WM_QUIT. Utilizza GetMessage e PeekMessage per recuperare i messaggi e PostMessage per inviare i messaggi recuperati alla procedura di Windows.

Se fai

Form myForm = new Form(); 
myForm.Show(); 

mostrerà la forma e uscire fuori. Si utilizzerà new Form() & .Show() quando si desidera avviare un nuovo modulo dal modulo esistente.

Spero che questo risponda alla tua domanda.

+4

La cosa importante qui è il ciclo dei messaggi. Senza questo, in pratica, apri un windo senza che il ciclo di messaggistica funzioni. – TomTom

+2

In effetti, è il messaggio pompa.Troverai molto più facile capire se hai fatto uno sviluppo in C++ Windows: il più alto livello di astrazione di C# rende più difficili da capire. –

+0

@VladislavZorov è giusto. Avevo fatto un po 'di cose in VC++, anche nel fatto che avevi un sacco di cose cucinate. –

4

per avviare un'applicazione con un modulo principale, in modo che l'applicazione termina quando la forma principale è chiusa. sarà associato al thread corrente. esegue questo modulo in un loop di messaggi.

Message Loop significa: Agiscono sui messaggi che il sistema operativo invia al thread principale dell'applicazione. Questi messaggi vengono ricevuti dalla coda messaggi dall'applicazione ripetutamente chiamando la funzione GetMessage (PeekMessage) in una sezione di codice denominata "ciclo eventi".

Application Run()

+1

-1. Questo è circolare e non spiega nulla. – TomTom

+0

sì ... lo correggo :) .. –