Закройте все приложение c # с помощью кнопки закрытия [дубликат]

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

140
задан Tshepang 10 December 2013 в 20:06
поделиться

8 ответов

Из MSDN:

Application.Exit

Сообщает все насосы сообщений, которые они должны завершать, а затем закрывает все окна приложений после сообщения были обработаны. Это код для использования, если вы вызвали Application.Run (приложения WinForms), этот метод останавливает все запущенные петли сообщений во всех потоках и закрывает все окна приложения.

Environment.Exit

Завершает этот процесс и дает базовой операционной системе указанный код выхода. Это код, который вызывается при использовании консольного приложения.

В этой статье Application.Exit vs. Environment.Exit указывает на хороший совет:

Вы можете определить, был ли вызван System.Windows.Forms.Application.Run, проверяя свойство System.Windows.Forms.Application.MessageLoop. Если true, то вызывается Run, и вы можете предположить, что приложение WinForms выполняется следующим образом.

if (System.Windows.Forms.Application.MessageLoop) 
{
    // WinForms app
    System.Windows.Forms.Application.Exit();
}
else
{
    // Console app
    System.Environment.Exit(1);
}

Ссылка: Почему Application.Exit не работает?

241
ответ дан Community 19 August 2018 в 03:58
поделиться
  • 1
    Это было действительно полезно для меня, так как у меня было приложение WinForms, у которого был аргумент, чтобы он мог работать беззвучно и, следовательно, не отображал форму. Когда форма была скрыта, Application.Exit() не удалось выйти из приложения, однако Environment.Exit(1) работал как шарм. – Dib 11 August 2017 в 10:51
  • 2
    Вопрос не касался выхода из-за ошибки, поэтому код выхода должен быть равен нулю: Environment.Exit(0) Любое ненулевое значение предназначено для кода ошибки приложения, который может использоваться сценарием для принятия соответствующих мер. (Это новый код и приложение WinForms, поэтому вряд ли это будет иметь значение в этом случае, но полезно знать, кто пишет инструменты командной строки). – YipYip 20 June 2018 в 19:00

В этом случае наиболее подходящий способ выхода из приложения для переопределения метода onExit () в App.xaml.cs:

protected override void OnExit(ExitEventArgs e) {
    base.OnExit(e); 
}
-2
ответ дан Anton Tsches 19 August 2018 в 03:58
поделиться
Environment.Exit(exitCode); //exit code 0 is a proper exit and 1 is an error
-1
ответ дан joe pelletier 19 August 2018 в 03:58
поделиться

Вы делаете:

Application.Run(myForm);

в вашем Main ()?

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

2
ответ дан LightStriker 19 August 2018 в 03:58
поделиться
  • 1
    да, у него есть Application.Run в файле Program.cs в Main. Что мне делать, чтобы закрыть его? – John Ernest Guadalupe 19 October 2012 в 16:54
  • 2
    Но вы передаете свою основную форму для запуска, не так ли? Форма, которую вы закрываете, нажав на красный X. – LightStriker 19 October 2012 в 16:55
  • 3
    да, у меня есть это сэр. Это так: Application.Run (новый Form2 ()); – John Ernest Guadalupe 19 October 2012 в 16:56
  • 4
    В этом случае, если основная форма, переданная в Run, была действительно полностью закрыта, приложение автоматически выйдет. Затем вы должны отслеживать, почему эта форма все еще открыта, запущена или скрыта где-то. – LightStriker 19 October 2012 в 16:59

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

using System;
using System.Threading;
using System.Windows.Forms;

namespace Sandbox_Form
{
    static class Program
    {
        private static Thread thread;

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            thread = new Thread(BusyWorkThread);
            thread.IsBackground = false;
            thread.Start();

            Application.Run(new Form());

        }

        public static void BusyWorkThread()
        {
            while (true)
            {
                Thread.Sleep(1000);
            }
        }
    }
}

Когда IsBackground есть false, это будет поддерживать вашу программу открытой до тех пор, пока поток не завершится, если вы установите IsBackground на true, нить не остановит программу. Такие вещи, как BackgroundWoker, ThreadPool и Task, внутренне используют поток с IsBackground, установленным на true.

12
ответ дан Scott Chamberlain 19 August 2018 в 03:58
поделиться

Кстати. когда мои формы называют событием закрытия формы или формы, я закрываю приложение с помощью функции this.Hide (). Это влияет на то, как сейчас работает мое приложение?

Короче говоря, да. Вся заявка закончится, когда основная форма (форма, запущенная с помощью Application.Run в методе Main) закрыта (не скрыта).

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

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

7
ответ дан Servy 19 August 2018 в 03:58
поделиться

Все, что вам нужно, это System.Environment.Exit(1);

И оно использует системное пространство имен «using System», которое почти всегда существует, когда вы запускаете проект.

10
ответ дан Stedy 19 August 2018 в 03:58
поделиться
  • 1
    Он больше подходит для консольных приложений. – Nidhin David 3 October 2014 в 06:08
  • 2
    Следует отметить, что события FormClosing / FormClosed не будут вызваны для среды. Exit также exitCode должен быть отличным от нуля, если произошла ошибка, – Raphael Smit 27 August 2016 в 16:17

Я хотел бы либо одно из следующего:

Application.Exit ();

для winform или

Environment.Exit (0);

для консольного приложения (также работает на winforms).

Спасибо!

1
ответ дан Techcraft7 19 August 2018 в 03:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: