2013-06-20 3 views
6

All'inizio del mio programma, sto verificando se posso avviare una connessione con un dispositivo su COM6. Se il dispositivo non viene trovato, desidero visualizzare un MessageBox e quindi terminare completamente il programma.Fine programma dopo MessageBox è chiuso

Ecco quello che ho finora nella funzione Main() del programma iniziale:

try 
{ 
    reader = new Reader("COM6"); 
} 
catch 
{ 
    MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error) 
} 

Application.EnableVisualStyles(); 
Application.SetCompatibleRenderingDefault(false); 
Application.Run(new Form1()); 

Quando provo mettere un Application.Exit(); dopo il comando MessageBox, i display MessageBox correttamente quando viene rilevato nessun dispositivo, ma quando chiude il MessageBox, Form1 si apre ancora, ma è completamente congelato e non mi permette di chiuderlo o fare clic su uno dei pulsanti che dovrebbero darmi comunque un errore poiché il dispositivo non è connesso.

Sto cercando solo di eliminare il programma completamente dopo la visualizzazione del MessageBox. Grazie.

SOLUZIONE: Dopo aver utilizzato il metodo return; dopo il MessageBox ha chiuso il programma di smettere proprio come avrei voluto quando il dispositivo non è stato collegato esso. Tuttavia, quando il dispositivo è stato collegato, ha avuto ancora problemi di lettura dopo il test. Questo era qualcosa che non avevo scoperto prima, ma era una soluzione semplice. Ecco il mio codice completamente funzionante:

try 
{ 
    test = new Reader("COM6"); 
    test.Dispose(); //Had to dispose so that I could connect later in the program. Simple fix. 
} 
catch 
{ 
    MessageBox.Show("No device was detected", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    return; 
} 
Application.EnableVisualStyles(); 
Application.SetCompatibleTextRenderingDefault(false); 
Application.Run(new Form1()); 

risposta

5

Trattandosi nel Main() di routine, solo ritorno:

try 
{ 
    reader = new Reader("COM6"); 
} 
catch 
{ 
    MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error) 
    return; // Will exit the program 
} 

Application.EnableVisualStyles(); 
//... Other code here.. 

ritorno da Main() uscirà il processo.

+0

Era semplice. Grazie per l'aiuto però. – VarnerBeast14

+0

Questa risposta dovrebbe aggiungere ulteriori spiegazioni sul perché 'Application.Exit()' non ha funzionato come spiegato da 'Jan Doerrenhaus' –

2

Aggiungi un boolean verso l'alto per determinare se l'operazione è stata completata.

bool readerCompleted = false; 
try 
{ 
    reader = new Reader("COM6"); 
    readerCompleted = true; 
} 
catch 
{ 
    MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error) 
} 

if(readerCompleted) 
{ 
    Application.EnableVisualStyles(); 
    Application.SetCompatibleRenderingDefault(false); 
    Application.Run(new Form1()); 
} 

Perché non c'è nessun codice dopo l'istruzione if, il programma sarà solo vicino quando il booleano è falso.

È possibile applicare questo tipo di logica a qualsiasi altra sezione del codice, non solo alla funzione Main().

+0

questo ha funzionato per quello che originariamente voluto, ma ora il programma non funzionerà quando il dispositivo è collegato. Sto andando a giocare con questo per un po ', ma grazie per avermi aiutato a risolvere il problema originale. – VarnerBeast14

6

Application.Exit indica all'applicazione WinForms di arrestare la pompa messaggi, quindi di uscire dal programma. Se lo chiami prima di chiamare Application.Run, il messaggio non viene mai avviato, quindi si blocca.

Se si desidera terminare il programma, indipendentemente dallo stato in cui si trova, utilizzare Environment.Exit.

+0

Probabilmente non è quello che mi serve qui, ma questo è utile sapere per problemi futuri che potrei avere. Stavo cercando quel tipo di codice "ammazza-tutto". – VarnerBeast14

0

Si può mettere Application.Exit() dopo il vostro codice di casella di messaggio
catch
{
MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error")
Application.Exit();
}