Как выйти из приложения Windows Forms сразу после отображения MessageBox при возникновении ошибки при запуске? - PullRequest
3 голосов
/ 04 ноября 2010

При запуске приложения Windows Forms я читаю XML-файл. Если этот файл не существует или не имеет определенной настройки, я хочу отобразить MessageBox для пользователя с указанием проблемы, а затем закрыть приложение.

Я пытался сделать это в событии Load основной формы с Application.Exit(), например, так:

private void MainForm_Load(object sender, EventArgs e)
{
    if (!StartupSettingsCorrect())
    {
        MessageBox.Show("Blabla... Can't start application.");
        Application.Exit();
    }

    // Other stuff...
}

Но это не похоже на чистоту. (Приложение работает, но «невидимо» без формы на экране.)

Каков лучший способ и место для чистого отключения в этой ситуации?

Заранее спасибо за помощь!

Ответы [ 7 ]

10 голосов
/ 04 ноября 2010

Environment.Exit() должен сделать свое дело.По крайней мере, он работал для меня в ситуации, которую вы описали.

Согласно MSDN , этот метод

Завершает этот процесс и дает базовой операционной системе указаннуюкод выхода.

3 голосов
/ 04 ноября 2010

Прочитайте файл XML в методе Main файла Program.cs (должен быть создан автоматически).Если вы получили ошибку, не загружайте форму.

    static void Main ()
    {
        if ( !StartupSettingsCorrect())
        {
            MessageBox.Show( "Blabla... Can't start application." );
        }
        else
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault( false );
            Application.Run( new MainForm() );
        }
    }
2 голосов
/ 04 ноября 2010

Этот метод позволяет избежать запуска основной формы, если некоторые предварительные условия не были выполнены.

Ваше приложение не будет выгружено, пока вы не выйдете из MessageBox.

static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main()
    {
        if (!StartupSettingsCorrect())
        {
            MessageBox.Show("Blabla... Can't start application.");
        }
        else
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}
1 голос
/ 17 марта 2011

Environment.Exit() рекомендуется только для Консольных приложений .

Для Винформ , используйте Application.Exit()

Если вы хотите выйти из программы перед загрузкой основной формы, пример, предоставленный «colinsmith», хорош!

1 голос
/ 04 ноября 2010

Метод Application.Exit останавливает все запущенные циклы сообщений во всех потоках и закрывает все окна приложений.Но в зависимости от того, когда он вызывается, это не обязательно заставляет процесс завершаться.Если вы вызываете Application.Exit перед загрузкой вашей основной формы, это должно сработать.

Другим решением будет закрыть вашу основную форму - остальное будет обработано для вас.Это эквивалентно использованию Application.Shutdown .

В противном случае вы можете использовать Environment.Exit .Я считаю, что это завершает процесс, не раскручивая стек и не выполняя блоки finally.Так что это очень грубо, но это не может быть проблемой в вашем текущем контексте.

0 голосов
/ 27 ноября 2012

Form.Dispose () может использоваться для полного освобождения ресурсов, удерживаемых этой программой.

private void MainForm_Load(object sender, EventArgs e)
{
    if (!StartupSettingsCorrect())
    {
        MessageBox.Show("Blabla... Can't start application.");
        Me.Dispose();
    }

    // Other stuff...
}

Я думаю, это было бы хорошо для очистки ресурсов и для полного выхода из приложения.

0 голосов
/ 23 мая 2011

В Form_Load:

Me.Visible = False

if yourCheckNotOk then
  MessageBox("check failed..")
  Me.close()
else
  ...
  ...
  ...
  Me.Visible = True
end if

Протестировано с VS 2010. (Предполагается, что для режима выключения в настройках проекта установлено значение "Когда форма запуска закрывается", а событие Load - это событие формы запуска)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...