В течение нескольких лет я использовал C # (Windows Forms), я никогда не использовал WPF. Но теперь я люблю WPF, но я не знаю, как мне выйти из приложения, когда пользователь нажимает на пункт «Выход» из меню «Файл».
Я пытался:
this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();
Среди многих других. Ничего не работает
Application.Current.Shutdown();
ваша функция не вернется сразу. Вам также нужно позвонитьreturn;
для этого.Application
это НЕ статический класс. НаличиеApplication.Current
статического члена не означает, что он статический. Вместо этого это нормальный класс, который можно получить.Если вам действительно нужно это закрыть, вы также можете использовать Environment.Exit () , но это совсем не изящно (больше похоже на завершение процесса).
Используйте это следующим образом:
источник
Environment.Exit()
нужен хотя бы один параметр, код выхода. Используйте,Environment.Exit(0)
если вас не интересует код выхода.Application.Current.Shutdown();
Application.Current.Shutdown();
моимClosing
событием было вызвано, когда я просто хотел немедленно закрыть приложение. ТакEnvironment.Exit(0);
был лучший выбор.Как сказал Вуминци ,
Application.Current.Shutdown();
он необратим, и я считаю, что он обычно используется для принудительного закрытия приложения в такие моменты, как когда пользователь выходит из системы или закрывает Windows.Вместо этого позвоните
this.close()
в главное окно. Это то же самое, что нажать Alt+ F4или закрыть кнопку [x] в окне. Это приведет к закрытию всех других принадлежащих ему окон и вызовет их,Application.Current.Shutdown();
пока действие закрытия не было отменено. Пожалуйста, смотрите документацию MSDN по закрытию окна .Кроме того, поскольку его
this.close()
можно отменить, вы можете поместить его в диалог подтверждения сохранения изменений в обработчике закрывающих событий. Просто создайте обработчик события<Window Closing="...">
и измените егоe.Cancel
соответствующим образом. ( Подробнее о том, как это сделать, см. Документацию MSDN .)источник
При необходимости используйте любое из следующего:
1.
2.
Выше все методы будут вызывать
closing event
изWindow
класса и выполнение может остановиться на каком - то момент (причина , как правило , приложение ставить диалоги , как «вы уверены?» Или « вы бы хотели сохранить данные перед закрытием? », Перед тем, как окно полностью закрыто)3. Но если вы хотите прекратить приложение без предупреждения немедленно. Используйте ниже
источник
Это должно сделать трюк:
Если вам интересно, вот некоторые дополнительные материалы, которые я нашел полезными:
Подробная информация о приложении. Текущий
Жизненный цикл приложения WPF
источник
Вот как я делаю мои:
Я звоню только
Application.Current.ShutDown()
из главного окна приложения, все остальные окна используютthis.Close()
. В моем главном окнеWindow_Closing(...)
обрабатывает верхнюю правуюx
кнопку. Если какой-либо из методов вызывает окно ближе,Window_Closing(...)
захватывает событие для выключения, если пользователь подтверждает.Причина, по которой я действительно использую
Application.Current.Shutdown()
свое главное окно, заключается в том, что я заметил, что если была допущена ошибка проектирования, и я не объявил родителя одного из моих окон в приложении, если это окно открывается без предварительного отображения до последнего закрытия активного окна у меня остается скрытое окно, работающее в фоновом режиме. Приложение не будет закрыто. Единственный способ предотвратить полную утечку памяти - это зайти в диспетчер задач, чтобы закрыть приложение.Application.Current.Shutdown()
защищает меня от непреднамеренных недостатков дизайна.Это из моего личного опыта. В конце концов, используйте то, что лучше для вашего сценария. Это просто еще одна часть информации.
источник
Там не должно быть
Application.ShutDown();
или.Exit()
сообщение.Application
это статический класс. Это не относится к текущему приложению. Вам нужно перейти к текущему приложению, а затем закрыть его следующим образом:источник
Еще один способ сделать это:
Это заставит убить ваше приложение. Это всегда работает, даже в многопоточном приложении.
Примечание: просто будьте осторожны, чтобы не потерять несохраненные данные в другом потоке.
источник
источник
Пытаться
Для меня
не работал
источник
По моему пониманию,
Application.Current.Shutdown()
тоже имеет свой недостаток.Если вы хотите показать окно подтверждения, чтобы позволить пользователям подтвердить при выходе или нет,
Application.Current.Shutdown()
необратимо.источник
Application.Current.Shutdown()
.Подводя итог, есть несколько способов сделать это.
1) Уничтожение процесса, который пропускает финализацию, обработку ошибок и т.д .:
2) Завершение работы текущего приложения, что, вероятно, является правильным способом, потому что оно вызывает события выхода:
или
(при подключении в экземпляре класса App)
3) Закрытие текущего приложения (все формы должны быть закрыты / закончены ранее):
(при подключении в экземпляре класса App)
4) Выход из среды, которая завершает приложение:
Также вы можете прочитать о статусах выхода здесь
источник
Caliburn микро ароматизированный
источник
Если вы хотите выйти из другого потока, который не создал объект приложения, используйте:
источник
Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;
источник
Из кода xaml вы можете вызвать предопределенную SystemCommand:
Я думаю, что это должно быть предпочтительным способом ...
источник