Завершить программу после закрытия 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();
}