답변:
응용 프로그램을 종료하려면 전화하십시오
System.Windows.Application.Current.Shutdown();
Application.Shutdown
메소드 의 문서에서 설명한대로 ShutdownMode 를 지정하여 애플리케이션의 종료 동작을 수정할 수도 있습니다 .
다음과 같은 상황에서는 WPF (Windows Presentation Foundation)에서 시스템 종료를 암시 적으로 호출합니다.
- ShutdownMode가 OnLastWindowClose로 설정된 경우.
- ShutdownMode가 OnMainWindowClose로 설정된 경우.
- 사용자가 세션을 종료하고 SessionEnding 이벤트가 처리되지 않거나 취소되지 않고 처리되는 경우
또한 객체 Application.Current.Shutdown();
를 생성 한 스레드 Application
, 즉 일반적으로 메인 스레드 에서만 호출 될 수 있습니다 .
Application.Current.Shutdown();
의 기능은 즉시 반환되지 않습니다. return;
이것도 전화해야합니다 .
Application
는 정적 클래스가 아닙니다. Application.Current
정적 멤버가 있다고해서 정적 멤버라는 의미는 아닙니다. 대신 파생 될 수있는 일반 클래스입니다.
실제로 종료 해야하는 경우 Environment.Exit ()을 사용할 수도 있지만 프로세스를 끝내는 것과 같이 전혀 우아하지 않습니다.
다음과 같이 사용하십시오.
Environment.Exit(0)
Environment.Exit()
종료 코드 인 하나 이상의 매개 변수가 필요합니다. Environment.Exit(0)
종료 코드가 걱정되지 않는 경우 사용하십시오 .
Application.Current.Shutdown();
Application.Current.Shutdown();
내 Closing
이벤트가 호출, 때 단순히 바로 내 응용 프로그램 종료를 원했다. 그래서 Environment.Exit(0);
더 나은 선택이었다.
으로 wuminqi 말했다 , Application.Current.Shutdown();
비가 역적이며, 나는 일반적으로 사용자가 로그 오프 또는 Windows 아래로 종료되는 때와 같이 시간에 가까운 응용 프로그램을 강제하는 데 사용됩니다 믿습니다.
대신 this.close()
기본 창에서 전화 하십시오. 이것은 창에서 Alt+ F4또는 닫기 [x] 버튼을 누르는 것과 같습니다 . 이렇게하면 소유 한 다른 모든 창이 Application.Current.Shutdown();
닫히고 닫기 작업이 취소되지 않는 한 전화가 종료됩니다 . 창 닫기 에 대한 MSDN 설명서를 참조하십시오 .
또한 this.close()
취소 할 수 있으므로 닫기 이벤트 핸들러에 변경 사항 저장 확인 대화 상자를 넣을 수 있습니다. 이벤트 핸들러를 <Window Closing="...">
만들고 e.Cancel
그에 따라 변경하면 됩니다. 이 작업을 수행하는 방법에 대한 자세한 내용 은 MSDN 설명서 를 참조하십시오.
필요에 따라 다음 중 하나를 사용하십시오.
1.
App.Current.Shutdown();
OR
Application.Current.Shutdown();
2.
App.Current.MainWindow.Close();
OR
Application.Current.MainWindow.Close();
모든 메소드 호출됩니다 위 closing event
의 Window
클래스와 실행이 어떤 시점에서 중지 할 수 있습니다 (원인은 일반적으로 응용 프로그램과 같은 대화를 넣어 '는? 확실히 당신입니다' '또는 겠습니까 당신이 마감되기 전에 데이터를 저장 하시겠습니까? ', 윈도우가 완전히 닫히기 전에)
3. 그러나 경고없이 즉시 응용 프로그램을 종료하려는 경우 . 아래에서 사용하십시오
Environment.Exit(0);
트릭을 수행해야합니다.
Application.Current.Shutdown();
관심이 있으시면 도움이 될만한 추가 자료가 있습니다.
내가하는 방법은 다음과 같습니다.
// Any control that causes the Window.Closing even to trigger.
private void MenuItemExit_Click(object sender, RoutedEventArgs e)
{
this.Close();
}
// Method to handle the Window.Closing event.
private void Window_Closing(object sender, CancelEventArgs e)
{
var response = MessageBox.Show("Do you really want to exit?", "Exiting...",
MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
if (response == MessageBoxResult.No)
{
e.Cancel = true;
}
else
{
Application.Current.Shutdown();
}
}
Application.Current.ShutDown()
기본 응용 프로그램 창 에서만 전화 하고 다른 모든 창은을 사용 this.Close()
합니다. 내 메인 윈도우에서 Window_Closing(...)
오른쪽 상단 x
버튼을 처리 합니다. 어떤 메소드도 윈도우 클로저 Window_Closing(...)
를 요구하면 사용자가 확인하면 종료 이벤트를받습니다.
실제로 Application.Current.Shutdown()
기본 창에서 사용하는 이유 는 디자인 실수가 있었고 응용 프로그램에서 내 창 중 하나의 부모를 선언하지 않은 경우 해당 창을 미리 표시하지 않고 열면 마지막 활성 창 닫기까지 백그라운드에서 숨겨진 창이 실행됩니다. 응용 프로그램이 종료되지 않습니다. 완전한 메모리 누수를 방지하는 유일한 방법은 작업 관리자 에서 응용 프로그램을 종료하는 것입니다. Application.Current.Shutdown()
의도하지 않은 설계 결함으로부터 나를 보호합니다.
그것은 내 개인적인 경험에서 비롯된 것입니다. 결국 시나리오에 가장 적합한 것을 사용하십시오. 이것은 또 다른 정보입니다.
당신이 이것을 할 수있는 또 다른 방법 :
System.Diagnostics.Process.GetCurrentProcess().Kill();
이로 인해 응용 프로그램이 강제 종료됩니다. 멀티 스레드 응용 프로그램에서도 항상 작동합니다.
참고 : 다른 스레드에서 저장되지 않은 데이터가 손실되지 않도록주의하십시오.
private void _MenuExit_Click(object sender, RoutedEventArgs e)
{
System.Windows.Application.Current.MainWindow.Close();
}
//Override the onClose method in the Application Main window
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
MessageBoxResult result = MessageBox.Show("Do you really want to close", "",
MessageBoxButton.OKCancel);
if (result == MessageBoxResult.Cancel)
{
e.Cancel = true;
}
base.OnClosing(e);
}
시험
App.Current.Shutdown();
나를 위해
Application.Current.Shutdown();
작동하지 않았다.
내 이해에 따르면 Application.Current.Shutdown()
단점도 있습니다.
사용자가 종료시 확인할 수 있도록 확인 창을 표시하려면 Application.Current.Shutdown()
되돌릴 수 없습니다 .
Application.Current.Shutdown()
그러나 전화하기 전에 사용자 확인을받을 수 있습니다 .
요약하면 몇 가지 방법이 있습니다.
1) 마무리, 오류 처리 등을 건너 뛰는 프로세스 종료 :
Process.GetCurrentProcess().Kill();
2) 현재 응용 프로그램을 종료하십시오. 종료 이벤트를 호출하기 때문에 올바른 방법 일 것입니다.
Application.Current.Shutdown();
또는
this.Shutdown();
(App 클래스의 인스턴스에 집착했을 때)
3) 현재 앱 닫기 (모든 양식을 먼저 닫거나 종료해야 함) :
this.Close();
(App 클래스의 인스턴스에 집착했을 때)
4) 환경을 종료하면 앱이 종료됩니다.
Environment.Exit(0);
또한 여기에서 종료 상태에 대해 읽을 수 있습니다.
칼리 번 마이크로 맛
public class CloseAppResult : CancelResult
{
public override void Execute(CoroutineExecutionContext context)
{
Application.Current.Shutdown();
base.Execute(context);
}
}
public class CancelResult : Result
{
public override void Execute(CoroutineExecutionContext context)
{
OnCompleted(this, new ResultCompletionEventArgs { WasCancelled = true });
}
}
응용 프로그램 객체를 만들지 않은 다른 스레드를 종료하려면 다음을 사용하십시오.
System.Windows.Application.Current.Dispatcher.InvokeShutdown();
xaml 코드에서 사전 정의 된 SystemCommand를 호출 할 수 있습니다.
Command="SystemCommands.MinimizeWindowCommand"
나는 이것이 선호되는 방법이어야한다고 생각합니다 ...