2013-06-20 36 views
6

Ganz am Anfang meines Programms überprüfe ich, ob ich eine Verbindung mit einem Gerät an COM6 herstellen kann. Wenn das Gerät nicht gefunden wird, möchte ich eine MessageBox anzeigen und das Programm dann vollständig beenden.Programm beenden, nachdem MessageBox geschlossen ist

Hier ist, was ich bisher in der Main() Funktion des ursprünglichen Programms habe:

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

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

Wenn ich versuche, ein Application.Exit(); nach dem MessageBox Befehl setzen, richtig die MessageBox angezeigt, wenn kein Gerät erkannt wird, aber wenn ich schließe die MessageBox, Form1 bleibt geöffnet, ist aber vollständig eingefroren und lässt mich nicht schließen oder auf einen der Buttons klicken, die mir sowieso einen Fehler melden sollten, da das Gerät nicht verbunden ist.

Ich bin nur auf der Suche nach weg, um das Programm vollständig zu beenden, nachdem die MessageBox angezeigt wird. Vielen Dank.

LÖSUNG: Nach der Verwendung der return; Methode nach der MessageBox geschlossen das Programm beendet, so wie ich es wollte, wenn das Gerät nicht angeschlossen war. Wenn das Gerät jedoch angeschlossen wurde, traten nach dem Test immer noch Probleme beim Lesen auf. Das war etwas, das ich vorher nicht entdeckt hatte, aber es war eine einfache Lösung. Hier ist mein voll funktionierenden Code:

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()); 

Antwort

5

Da dies in der Main() Routine ist, kehrt gerade:

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.. 

Rückkehr aus Main() wird den Prozess beenden.

+0

Das war einfach. Danke für die Hilfe. – VarnerBeast14

+0

Diese Antwort sollte mehr erklären, warum 'Application.Exit()' nicht funktionierte, wie von 'Jan Doerrenhaus' erklärt –

2

ein boolean nach oben hinzufügen, um zu bestimmen, ob der Vorgang abgeschlossen.

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()); 
} 

Da es kein Code nach der if Anweisung ist, wird das Programm nur schließen, wenn die boolean ist falsch.

Sie können diese Art von Logik auf jeden anderen Abschnitt Ihres Codes anwenden, nicht nur auf die Main()-Funktion.

+0

Das funktionierte für das, was ich wollte ursprünglich, aber jetzt ist das Programm nicht funktionieren, wenn das Gerät eingesteckt ist. Ich werde spielen damit für ein bisschen, aber danke, dass Sie mir geholfen haben, das ursprüngliche Problem zu beheben. – VarnerBeast14

6

Application.Exit weist Ihre WinForms-Anwendung an, die Nachrichtenpumpe zu stoppen und das Programm zu beenden. Wenn Sie es anrufen, bevor Sie Application.Run aufrufen, die Nachricht Pumpe nie an erster Stelle zu starten, so dass es einfriert.

Wenn Sie Ihr Programm beenden möchten, unabhängig davon, in welchem ​​Zustand es ist, verwenden Sie Environment.Exit.

+0

Wahrscheinlich nicht, was ich hier brauche, aber das ist nützlich für zukünftige Probleme, die ich haben könnte. Ich habe nach dem "kill-all" Code gesucht. – VarnerBeast14

0

Sie können Application.Exit put() nach dem Meldungsfeld Code
catch
{
MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error")
Application.Exit();
}

Verwandte Themen