2013-06-20 4 views
6

В самом начале моей программы я проверяю, могу ли я инициировать соединение с устройством на COM6. Если устройство не найдено, я хочу отобразить MessageBox, а затем полностью завершить программу.Завершить программу после закрытия MessageBox

Вот то, что я до сих пор в Main() функции исходной программы:

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

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

Когда я пытаюсь положить Application.Exit(); после команды MessageBox, то MessageBox отображается правильно, если не обнаружено ни одного устройства, но когда я закройте MessageBox, Form1 все еще открывается, но полностью заморожен и не позволит мне закрыть его или щелкнуть любую из кнопок, которые должны дать мне ошибку в любом случае, так как устройство не подключено.

Я просто ищу, чтобы полностью убить программу после отображения MessageBox. Благодарю.

РЕШЕНИЕ: После использования метода return; после MessageBox закрыл программу бросить курить так же, как я хотел, когда устройство не подключено его. Однако, когда устройство было подключено, у него все еще возникали проблемы после тестирования. Это было то, что я раньше не обнаружил, но это было простое решение. Вот мой полностью рабочий код:

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

ответ

5

Поскольку это в Main() рутине, просто вернуться:

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

Возвращение из Main() выйдет из процесса.

+0

Это было просто. Спасибо за помощь. – VarnerBeast14

+0

В этом ответе следует добавить больше объяснений о том, почему 'Application.Exit()' не работает, как объясняется «Jan Doerrenhaus» –

2

Добавить boolean в верхней части, чтобы определить, является ли операция завершена.

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

Поскольку нет никакого кода после if заявления, программа просто закрывается, когда логическое ложна.

Вы можете применить эту логику к любому другому разделу вашего кода, а не только к функции Main().

+0

Это работало на то, что я изначально хотел, но теперь программа не будет работать, когда устройство подключено. Я буду играть с этим немного, но спасибо, что помогли мне исправить исходную проблему. – VarnerBeast14

6

Application.Exit сообщает вашему приложению WinForms о прекращении подачи сообщения, поэтому выход из программы. Если вы вызовете его до того, как вы вызовете Application.Run, насос сообщения никогда не запускался в первую очередь, поэтому он замерзает.

Если вы хотите завершить свою программу, независимо от того, в каком состоянии она находится, используйте Environment.Exit.

+0

Возможно, это не то, что мне нужно здесь, но это полезно знать о будущих проблемах, которые могут возникнуть у меня. Я искал этот код типа «kill-all». – VarnerBeast14

0

Вы можете поставить Application.Exit() после вашего сообщения коды коробки
catch
{
MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error")
Application.Exit();
}