developer tip

Winforms : Application.Exit 대 Enviroment.Exit 대 Form.Close

optionbox 2020. 12. 24. 23:36
반응형

Winforms : Application.Exit 대 Enviroment.Exit 대 Form.Close


다음은 애플리케이션을 종료 할 수있는 방법입니다.

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

이 세 가지 방법의 차이점은 무엇이며 각 방법을 언제 사용해야합니까?


적절한 방법은 Application.Exit(). Documentation 에 따르면 모든 메시지 루프를 종료하고 모든 창을 닫아 폼에 정리 코드를 실행할 수있는 가능성을 제공합니다 (Form.OnClose 등에서).

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

Form.Close말한대로합니다 : 양식을 닫습니다. 다른 양식이 열려있는 경우 (아마 지금은 아니지만 애플리케이션의 향후 버전에서) 애플리케이션이 종료되지 않습니다.

멀티 스레딩을 사용하는 경우 스레드 Application.Exit()가 종료되지 않습니다 (따라서 GUI가 종료 되더라도 애플리케이션은 백그라운드에서 계속 작동합니다). 따라서 기본 함수 (예 :) Program.Main()또는 OnClose기본 양식의 경우 스레드를 종료하기위한 조치를 취해야합니다 .


그들은 모두 괜찮습니다. 그러나 form.Close()응용 프로그램을 닫지 않으면 양식이 닫히고 그 후에 main-method가 int (exitcode)를 반환합니다.

애플리케이션이 종료 코드와 함께 종료되도록 Environmet.Exit(exitcode)하려면 main-method에서 종료 코드를 사용 하거나 반환합니다.


Dim forceExitTimer = New Threading.Timer(Sub() End, Nothing, 2500, Timeout.Infinite)
Application.Exit()

이 방법은 완벽하므로 소프트웨어를 강제로 종료하는 잔인한 End 명령을 호출하기 전에 application.exit로 소프트웨어를 부드럽게 닫을 수 있습니다.

참조 URL : https://stackoverflow.com/questions/13046019/winforms-application-exit-vs-enviroment-exit-vs-form-close

반응형