Завершить программу после закрытия MessageBox
в самом начале моей программы я проверяю, могу ли я инициировать соединение с устройством на COM6. Если устройство не найдено, то я хочу отобразить 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());
4 ответов
Так как это в 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()
завершит процесс.
Application.Exit
сообщает вашему приложению WinForms остановить насос сообщений, поэтому выход из программы. Если вы позвоните, прежде чем позвонить Application.Run
, насос сообщений никогда не запускался в первую очередь, поэтому он зависает.
Если вы хотите завершить свою программу, независимо от того, в каком состоянии она находится, используйте Environment.Exit
.
добавить 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
оператор, программа просто закроется, когда логическое значение равно false.
вы можете применить такую логику к любой другой части вашего кода, а не только .
вы можете поместить приложение.Выход () после кода окна сообщения catch
{
MessageBox.Show("No Device Detected", MessageBoxButtons.OK, MessageBoxIcon.Error")
Application.Exit();
}