У меня есть опубликованное приложение на C #. Проблема здесь в том, что всякий раз, когда я закрываю основную форму, нажимая на красную кнопку выхода, она закрывает форму, но не закрывает приложение. Я узнал об этом, когда попытался выключить компьютер, надеясь, что приложение, которое я создал, работало без сбоев, а затем я был засыпан множеством дочерних окон, с которыми я установил MessageBox
оповещения.
Я пытался, Application.Exit
но он по-прежнему вызывает все дочерние окна и оповещения, и я не знаю, как использовать Environment.Exit
и какое целое число вставить в него.
Кстати, всякий раз, когда мои формы вызывают событие formclosed
или, form closing
я закрываю приложение с помощью this.Hide()
функции; Влияет ли это на поведение моего приложения сейчас?
Ответы:
Из MSDN:
Application.Exit
Environment.Exit
Эта статья, Application.Exit vs. Environment.Exit , указывает на хороший совет:
Вы можете определить
System.Windows.Forms.Application.Run
, был ли вызван, проверивSystem.Windows.Forms.Application.MessageLoop
свойство. Если true, то был вызван Run, и вы можете предположить, что приложение WinForms выполняется следующим образом.Ссылка: Почему Application.Exit не работает?
источник
Application.Exit()
не смогла выйти из приложения, однакоEnvironment.Exit(1)
работала как шарм.Environment.Exit(0)
любое ненулевое значение подразумевает код ошибки конкретного приложения, который может использоваться сценарием для выполнения соответствующих действий. (Это новый код и приложение WinForms, так что в этом случае это вряд ли имеет значение, но это полезно знать всем, кто пишет инструменты командной строки.)Environment.Exit
можно использовать и для применения форм.return
заявление впоследствии улучшит этот подход. Как я понял код будет продолжать выполнение послеApplication.Exit()
до вreturn
заявлении.Я знаю, что это не та проблема, с которой вы столкнулись, однако еще одна причина, по которой это может произойти, заключается в том, что в вашем приложении открыт не фоновый поток.
Когда
IsBackground
этоfalse
будет держать вашу программу открыты до резьбы Завершает, если вы установитеIsBackground
наtrue
резьбу не будет держать программу открытой. Такие вещи, какBackgroundWoker
,ThreadPool
иTask
все внутренне используют поток сIsBackground
установленным наtrue
.источник
Все, что тебе нужно
System.Environment.Exit(1);
И он использует системное пространство имен «using System», которое почти всегда присутствует при запуске проекта.
источник
Я бы выбрал одно из следующих:
для формы или
для консольного приложения (работает также на winforms).
Спасибо!
источник
Короче да. Все приложение закончится, когда основная форма (форма, запущенная
Application.Run
вMain
методе) будет закрыта (не скрыта).Если все ваше приложение всегда должно полностью завершаться всякий раз, когда ваша основная форма закрыта, вам следует просто удалить этот обработчик закрытой формы. Не отменяя это событие и просто позволяя им закрыться, когда пользователь закроет его, вы получите желаемое поведение. Что касается всех других форм, если вы не собираетесь снова показывать тот же экземпляр формы, вы просто позволяете им закрыться, вместо того, чтобы предотвращать закрытие и скрывать их. Если вы показываете их снова, то их можно скрыть.
Если вы хотите, чтобы пользователь мог щелкнуть «x» для основной формы, но оставить другую форму открытой и, по сути, стать «новой» основной формой, то это немного сложнее. В таком случае вам нужно будет просто скрыть свою основную форму, а не закрывать ее, но вам нужно будет добавить какой-то механизм, который фактически закроет основную форму, когда вы действительно хотите, чтобы ваше приложение заканчивалось. Если вы находитесь в такой ситуации, вам нужно добавить больше вопросов к вашему вопросу, описывающих, какие типы приложений должны и не должны завершать программу.
источник
Вы делаете:
в вашем главном ()?
Я нашел очень простой способ убить приложение, когда форма закрыта.
источник
источник
В этом случае наиболее подходящий способ выхода из приложения - переопределить метод onExit () в App.xaml.cs:
источник