Вопрос

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

ПРАВКА 1:

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

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

заранее спасибо, Джордж

Это было полезно?

Решение

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

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

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

Другие советы

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

Process.GetCurrentProcess().Kill();

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

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

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

Я использую

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

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

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

if (secondForm != null && !secondForm.IsDisposed) secondForm.Dispose();

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top