[C#] 프로그래밍 방식으로 WPF 응용 프로그램을 종료하려면 어떻게합니까?

몇 년 동안 C # (Windows Forms)을 사용해 왔지만 WPF를 사용한 적이 없습니다. 그러나 이제 WPF가 마음에 들지만 사용자가 파일 메뉴에서 종료 메뉴 항목을 클릭 할 때 응용 프로그램을 종료하는 방법을 모르겠습니다.

나는 시도했다 :

this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();

많은 사람들 중에서. 아무것도 작동하지 않습니다.



답변

응용 프로그램을 종료하려면 전화하십시오

System.Windows.Application.Current.Shutdown();

Application.Shutdown메소드 의 문서에서 설명한대로 ShutdownMode 를 지정하여 애플리케이션의 종료 동작을 수정할 수도 있습니다 .

다음과 같은 상황에서는 WPF (Windows Presentation Foundation)에서 시스템 종료를 암시 적으로 호출합니다.

  • ShutdownMode가 OnLastWindowClose로 설정된 경우.
  • ShutdownMode가 OnMainWindowClose로 설정된 경우.
  • 사용자가 세션을 종료하고 SessionEnding 이벤트가 처리되지 않거나 취소되지 않고 처리되는 경우

또한 객체 Application.Current.Shutdown();를 생성 한 스레드 Application, 즉 일반적으로 메인 스레드 에서만 호출 될 수 있습니다 .


답변

실제로 종료 해야하는 경우 Environment.Exit ()을 사용할 수도 있지만 프로세스를 끝내는 것과 같이 전혀 우아하지 않습니다.

다음과 같이 사용하십시오.

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 eventWindow클래스와 실행이 어떤 시점에서 중지 할 수 있습니다 (원인은 일반적으로 응용 프로그램과 같은 대화를 넣어 ‘는? 확실히 당신입니다’ ‘또는 겠습니까 당신이 마감되기 전에 데이터를 저장 하시겠습니까? ‘, 윈도우가 완전히 닫히기 전에)

3. 그러나 경고없이 즉시 응용 프로그램을 종료하려는 경우 . 아래에서 사용하십시오

   Environment.Exit(0);

답변

트릭을 수행해야합니다.

Application.Current.Shutdown();

관심이 있으시면 도움이 될만한 추가 자료가 있습니다.

Application.Current에 대한 세부 사항

WPF 응용 프로그램 수명주기


답변

내가하는 방법은 다음과 같습니다.

// 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()의도하지 않은 설계 결함으로부터 나를 보호합니다.

그것은 내 개인적인 경험에서 비롯된 것입니다. 결국 시나리오에 가장 적합한 것을 사용하십시오. 이것은 또 다른 정보입니다.


답변

Application.ShutDown();또는 .Exit()메시지 가 없어야 합니다.

Application정적 클래스입니다. 현재 애플리케이션을 참조하지 않습니다. 현재 응용 프로그램으로 이동하여 다음과 같이 종료해야합니다.

Application.Current.Shutdown();