Winforms : Application.Exit 대 Enviroment.Exit 대 Form.Close
다음은 애플리케이션을 종료 할 수있는 방법입니다.
Enviroment.Exit(0)
Application.Exit()
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로 소프트웨어를 부드럽게 닫을 수 있습니다.
'developer tip' 카테고리의 다른 글
Azure 저장소 테이블과 SQL (0) | 2020.12.24 |
---|---|
PHP const 배열 (0) | 2020.12.24 |
readonly modifier와 private setter 중 어느 것이 더 낫습니까? (0) | 2020.12.15 |
JavaScript 객체에서 키를 정렬 / 순서화하는 방법이 있습니까? (0) | 2020.12.15 |
C #을 사용하여 Excel 파일에서 데이터를 읽는 방법 (0) | 2020.12.15 |