2012-10-24 2 views
41

대 Enviroment.Exit 대 Application.Exit은 우리가 응용 프로그램을 종료 할 수있는 방법은 다음과 같습니다윈폼 : 다음을 알리고 Form.Close

  1. Enviroment.Exit(0)
  2. Application.Exit()
  3. Form.Close()

무엇 이 세 가지 방법의 차이점과 각 방법을 사용할 때의 차이점은 무엇입니까?

+5

이 중복 질문하지 않습니다에가 ExitCode를 반환하여 응용 프로그램이 종료 할 것을 원하는 경우. 신청서를 종료 할 때 사용할 애플리케이션을 묻지 않습니다. 비슷한 작업을 수행함에 따라 이러한 메서드 간의 차이점을 묻는 중입니다. 문서 참조 용 –

답변

75

적절한 방법은 Application.Exit()입니다. Documentation에 따르면, 모든 메시지 루프를 종료하고 모든 창을 닫음으로써 양식에 정리 코드 (Form.OnClose 등)를 실행할 수있는 가능성을 부여합니다.

Environment.Exit은 프로세스를 죽일뿐입니다. 일부 양식에 예를 들어 저장되지 않은 변경 사항은 사용자에게 저장할 것인지 묻는 기회가 없습니다. 또한 리소스 (데이터베이스 연결 등)를 제대로 해제 할 수 없거나 파일이 플러시되지 않을 수도 있습니다.

Form.Close 그냥 폼을 닫습니다. 다른 양식이 열려있는 경우 (아마도 지금은 아니지만 향후 버전의 응용 프로그램에서) 응용 프로그램이 종료되지 않습니다.

멀티 스레딩을 사용하는 경우 Application.Exit()은 스레드를 종료하지 않으므로 GUI가 종료 된 경우에도 응용 프로그램이 백그라운드에서 계속 작동합니다. 따라서 주요 기능 (예 : Program.Main()) 또는 기본 양식의 OnClose 이벤트에서 스레드를 죽이기위한 조치를 취해야합니다.

+2

+1 –

+3

스레드가 프로세스를 종료하지 못하도록 IsBackground 속성을 스레드에 설정할 수 있습니다. –

+1

파일을 플러시하는 것에 대해 정말 사실입니까? 프로세스가 종료되면 OS는 핸들을 플러시하는 기존 핸들을 모두 닫아야합니다. –

2

모두 괜찮습니다. 이지만 form.Close()은 응용 프로그램을 닫지 않으므로 양식을 닫은 후 주 메소드가 int (종료 코드)를 반환합니다.

당신이 exitcodes이 Environmet.Exit(exitcode)을 사용하거나 메인 방법