Application.Exit - PullRequest
       8

Application.Exit

20 голосов
/ 29 июня 2009

Я использую VSTS 2008 + .Net 3.5 + C # для разработки приложения Windows Forms. Мое замешательство, кажется, Application.Exit не заставляет приложение завершаться? Если нет, какой метод я должен вызвать, чтобы приложение завершилось?

РЕДАКТИРОВАТЬ 1:

Обычно метод main выглядит следующим образом: как изящно выйти из функции Main без вызова Environment.Exit?

    static void Main()
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        try
        {
            Application.Run(new Form1());
        }
        catch (Exception ex)
        {
            Console.WriteLine (ex.Message);
        }
    }

спасибо заранее, George

Ответы [ 6 ]

35 голосов
/ 29 июня 2009

Application.Exit действительно просто очень мягко запрашивает цикл сообщений.

Если вы хотите, чтобы ваше приложение закрывалось, лучший способ - изящно выделить его из Main и аккуратно закрыть все дополнительные не фоновые потоки.

Если вы хотите быть жестоким ... Environment.Exit или Environment.FailFast? примечание это грубо - примерно так же, как убить своего Process.

16 голосов
/ 15 мая 2013

Попробуйте следующее:

Process.GetCurrentProcess().Kill();

Environment.Exit не работает с Winforms и Environment.FailFast выдает свое собственное исключение.

4 голосов
/ 29 июня 2009

Если ваше приложение не выходит изящно при вызове Application.Exit, есть (очевидно) что-то, что мешает ему это сделать. Это может быть что угодно, от установки формы e.Cancel = true в событии FormClosing до потока, который не является фоновым потоком, который все еще выполняется. Я бы посоветовал вам тщательно исследовать, что именно поддерживает ваш процесс, и хорошенько закрыть его. Это также должно привести к тому, что ваше приложение будет закрыто.

Как правило, в приложении winforms должно быть достаточно закрыть основную форму.

2 голосов
/ 29 июня 2009

Я использую

if (System.Windows.Forms.Application.MessageLoop)
{
   // Use this since we are a WinForms app
   System.Windows.Forms.Application.Exit();
}
else
{
   // Use this since we are a console app
   System.Environment.Exit(1);
}

из http://geekswithblogs.net/mtreadwell/archive/2004/06/06/6123.aspx

1 голос
/ 24 декабря 2012

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

В этом случае есть два решения. Во-первых, просто используйте Close () в главной форме вместо Application.Exit (). Второе решение - использовать следующий код:

if (secondForm != null && !secondForm.IsDisposed) secondForm.Dispose();
0 голосов
/ 19 июня 2015

Я обнаружил, что все, что вам нужно сделать, это просто сделать application.exit, и все, что вам нужно сделать, это вставить Конец Достаточно просто команда End закрывает его

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