Application.Exit

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

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

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

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

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

 George229 июн. 2009 г., 10:56
Марк, я прочитал твой ответ, но куда звонить Клоузу? Внутри Main или замените код для вызова Application.Exit на код для вызова Close?
 stackptr23 февр. 2014 г., 19:32
Что не так сEnvironment.Exit(Environment.ExitCode)?
 Marc Gravell♦29 июн. 2009 г., 10:42
Повторное редактирование - в вашей форме просто вызовите Close ();

Ответы на вопрос(6)

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

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

 29 июн. 2009 г., 10:56
@ George2: невозможно сказать, но если бы я сидел с кодом и информацией, которая у меня есть сейчас, это была бы моя первая ставка.
 29 июн. 2009 г., 12:14
Если это так, рассмотрите возможность добавления некоторых механизмов сигнализации (EventWaitHandle), чтобы уведомить эти потоки о том, что они должны завершиться. Затем присоединитесь к ним и подождите, пока они не закончат. (Это лучше, чем сделать их фоновыми и убить их автоматически)
 George229 июн. 2009 г., 10:54
Благодаря @Fredrik, когда я вызываю Application.Exit, выполняются некоторые не фоновые потоки (они создаются мной явно с использованием new Thread (). Start ()), как вы думаете, это причина явного создания потоков, которые блокирует выход моего приложения (при вызове Application.Exit ())?
 George229 июн. 2009 г., 10:42
Вы имеете в виду, что если все потоки, которые я создал явно, помечены как фоновые, то приложение должно завершиться после вызова Application.Exit?
 29 июн. 2009 г., 10:45
@ George2: по крайней мере, они не будут поддерживать приложение, будучи приоритетными; Могут быть и другие причины, по которым он не выходит, но это одно место, чтобы проверить. Однако я думаю, что значением по умолчанию для Thread.IsBackground является false. Хотя стоит проверить.

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

 23 июн. 2015 г., 00:35
Ах, прости, тогда я не знаю
 19 июн. 2015 г., 20:19
Это действительно не отвечает на вопрос. Среди прочего, вы не говорите, чтоEnd средства. Вы имеете в виду VB.NET? Вопрос о C #.
Решение Вопроса

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

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

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

 George229 июн. 2009 г., 10:38
Спасибо Марк, я запутался, как изящно выйти из функции Main. Я разместил свой код в своем исходном сообщении в разделе EDIT 1. Есть идеи почему?
 29 июн. 2009 г., 10:24
+1 за отличную персонификацию
 George229 июн. 2009 г., 10:55
Марк, я прочитал твой ответ, но куда звонить Клоузу? Внутри Main или замените код для вызова Application.Exit на код для вызова Close?
 29 июн. 2009 г., 11:13
Либо ;-p Предположительно, однако, вы находитесь в форме, когда хотите выйти (возможно, в виде кнопки и т. Д.), Поэтому форма может выдать this.Close () для себя.
 George229 июн. 2009 г., 13:15
Спасибо Марк, 1. Мне интересно узнать, что на самом деле делает Application.Exit - просто отключить передачу сообщений и больше не выполнять никаких функций (например, завершить работу приложения)? 2. Если Application.Exit не имеет функции для завершения приложения Windows Forms, почему, если мы устанавливаем свойство другого потока для потоков backgourd, после вызова Application.Exit приложение будет завершено?

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

Process.GetCurrentProcess().Kill();

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

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

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

if (secondForm != null && !secondForm.IsDisposed) secondForm.Dispose();
 12 июн. 2013 г., 01:30
mainForm.Close () работает для меня. У меня было скрытое окно, которое вызывало эту проблему. В чем разница между Close () и Application.Exit ()?

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

 George229 июн. 2009 г., 13:16
Спасибо, Питер, 1. Мне интересно узнать, что на самом деле делает Application.Exit - просто отключить передачу сообщений и больше не выполнять никаких функций (например, завершить работу приложения)? 2. Если Application.Exit не имеет функции для завершения приложения Windows Forms, почему, если мы устанавливаем свойство другого потока для потоков backgourd, после вызова Application.Exit приложение будет завершено?
 29 июн. 2009 г., 13:21
Привет, Джордж2, из MSDN: 1. Application.Exit Сообщает всем сообщениям о том, что они должны прекратить работу, а затемcloses all application windows после того, как сообщения были обработаны. 2. имеет функцию завершения / закрытия

Ваш ответ на вопрос