Application.Shutdown을 호출 할 때 응용 프로그램을 종료 할 수없는 경우가 있지만 UI가 닫혔지만 프로세스가 계속 실행 중입니다. 모든 스레드를 닫은 채로 응용 프로그램을 종료하는 방법은 무엇입니까? Environment.Exit()은 모든 스레드를 닫을 수 있습니까? 또는 Win32 API TerminateThread을 호출해야합니까?Environment.Exit()과 Application.Shutdown() 사이의 차이점은 무엇입니까?
답변
Environment.Exit()은 응용 프로그램을 종료하는 더 잔인한 방법입니다.하지만 일반적으로 응용 프로그램을 종료해야 응용 프로그램을 종료해야합니다. 잘못된 방법으로 문제를보고 있다고 생각합니다. 왜 다른 스레드가 정상적으로 닫히지 않는지 확인해야합니다.
주 폼에서 FormClosing event을 조사하고 응용 프로그램을 끊어 버리는 것을 막을 수있는 리소스를 닫을 수 있습니다.
이것은 앱을 중단하는 리소스를 찾는 방법입니다. 디버그 모드에서
- 는
- 이 제대로 닫히지 않습니다하는 방식에 응용 프로그램을 닫습니다 (이것은 당신이 응용 프로그램을 실행하는 모든 스레드를 볼 수 있습니다) threads의 전시를 할 수 있습니다.
- 비주얼 스튜디오에서 일시 중지를 누르십시오.
- 스레드 목록을보고 int가 그가 매달린 코드 위치를 보려면 클릭하십시오. 이제 어떤 리소스가 닫히지 않고 애플리케이션을 차단하는지 볼 수 있으므로 FormClosing 이벤트로 이동하십시오. 닫고 거기서 버리십시오. 당신이 클릭 할 때 응용 프로그램 전까지
- 반복
디버그 모드에서 스레드 목록이이 스레드가 rarly 이름이 아니라 당신의 통제하에 실행되는 일부 스레드를 표시합니다주의하십시오 : 제대로 닫히고 그들에게 기호가 없다는 메시지가 나타납니다. 이들은 무시할 수 있습니다.
응용 프로그램이 정상적으로 종료되는지 확인하는 이유 중 하나는 일부 자원 (FileStream)이 작동하지 않으면 일부 API를 사용하여 빠르게 강제로 모든 종류를 만들 수 있다는 것입니다 설정/데이터 파일이 쓰여지지 않는 것처럼 "임의"문제가 발생합니다.
- 당신은 결코 전화 TerminateThread
- 는 산란 모든 스레드가 배경, 당신이 그 (것)들을 완료하기 위해 기다릴 것입니다 응용 프로그램을 닫습니다 이런 식으로 표시가 있는지 확인해야한다.
오, 굉장해. # 2 할 수 있다는 것을 몰랐습니다. – Joel
IsBackground가이 문제를 해결했습니다. 매우 유용하고 놀라지 만 더 널리 알려지지 않았습니다. – SouthShoreAK
Shay가 말했듯이 TerminateThread는 결코 절대로 하나의 스레드를 종료시키지 않고 프로세스 자체의 다른 스레드에서 교착 상태와 손상을 일으킬 수 있습니다.
다른 프로세스의 TerminateProcess는 전체 프로세스를 중단시키고 OS를 정리하도록합니다. 프로세스를 종료하는 가장 빠른 방법입니다. OS에서 정리할 수없는 리소스가 없는지 확인해야합니다. TerminateProcess를 호출하기 전에 창을 닫는 것도 도움이됩니다.)
나는 생각하지만 Environemnt.Exit이 TerminateProcess를 호출했는지 확인하지 않았습니다.
Application.Shutdown은 프로세스가 즉시 종료되지 않으며 모든 종료 및 종료 알림을 보내고 모든 응용 프로그램의 창과 스레드가 닫힐 때까지 대기합니다.
- 1. before와 before 사이의 차이점은 무엇입니까?
- 2. MATLAB의 {}과 [] 사이의 차이점은 무엇입니까?
- 3. 두 SQL 문 사이의 차이점은 무엇입니까?
- 4. GROUP BY와 ORDER BY 사이의 차이점은 무엇입니까?
- 5. WH_MOUSE와 WH_MOUSE_LL 후크 사이의 차이점은 무엇입니까?
- 6. struct reg와 struct user_regs_struc 사이의 차이점은 무엇입니까?
- 7. jQuery의 live()와 ready() 사이의 차이점은 무엇입니까?
- 8. len()과 .__ len __() 사이의 차이점은 무엇입니까?
- 9. 연산자 new와 연산자 new [] 사이의 차이점은 무엇입니까?
- 10. 모듈에서 루비 1.8.7과 1.9.1 사이의 차이점은 무엇입니까?
- 11. 이러한 선언 사이의 기술적 차이점은 무엇입니까?
- 12. 컨트롤러와 메쏘드에서의 requestMapping 사이의 차이점은 무엇입니까?
- 13. xsl의 for-each와 templates 사이의 차이점은 무엇입니까?
- 14. CLONE과 오브젝트 복사 사이의 차이점은 무엇입니까?
- 15. 하위 창과 하위 창 사이의 차이점은 무엇입니까?
- 16. Python win32crypt.CryptProtectData의 2.5와 3.1 사이의 차이점은 무엇입니까?
- 17. Array.length = 0과 Array = [] 사이의 차이점은 무엇입니까?
- 18. WHERE와 HAVING 사이의 의미상의 차이점은 무엇입니까?
- 19. 조롱 클래스와 인터페이스 사이의 차이점은 무엇입니까?
- 20. Vista Home Premium과 Ultimate 사이의 실제 일별 운영상의 차이점은 무엇입니까?
- 21. Python과 Scheme 사이의 변수 범위 지정의 차이점은 무엇입니까?
- 22. 새로운 int와 new (int) 사이의 C++의 차이점은 무엇입니까?
- 23. Jdbc의 type2와 type 4 드라이버 사이의 실제 차이점은 무엇입니까
- 24. 파이썬과 루블러 사이의 정규 표현식의 차이점은 무엇입니까? Rubular 나에서
- 25. 소셜 네트워크 아키텍처, C++ 클라이언트 Neo4j 데이터베이스 사이의 차이점은 무엇입니까?
- 26. C++ 03과 C++ 11 사이의 정의되지 않은 동작의 차이점은 무엇입니까?
- 27. C#의 관찰 가능한 컬렉션에서 Count와 Count() 사이의 차이점은 무엇입니까?
- 28. 파이썬에서 dir (...)과 vars (...) .keys() 사이의 차이점은 무엇입니까?
- 29. INSERT select와 insert into select 사이의 차이점은 무엇입니까?
- 30. web.config 끝점 정의와 global.asax 경로 등록 사이의 차이점은 무엇입니까?
'Application.Shutdown'이라고도 불리는 응답을 주셔서 감사합니다.하지만 여전히 프로세스가 실행되고있는 것은 아니며, 어떤 스레드가 실행되고 있는지 발견하기 위해 노력했지만이 버그는 다시 생성되지 않았습니다 ... –