실행중인 모든 스레드를 종료하는 방법은 무엇입니까?
다음 코드는 응용 프로그램을 종료하지 않습니다. 응용 프로그램을 종료하고 실행중인 모든 스레드가 닫혔는지 확인하려면 어떻게해야합니까?
foreach (Form form in Application.OpenForms)
{
form.Close();
}
Application.Exit();
코드에서 스레드 사용을 표시하지 않지만 스레드가 있다고 가정 해 보겠습니다. 모든 스레드를 닫으려면 시작하기 전에 모든 스레드를 백그라운드 스레드로 설정해야합니다. 그러면 응용 프로그램이 종료 될 때 자동으로 닫힙니다. 예 :
Thread myThread = new Thread(...);
myThread.IsBackground = true; // <-- Set your thread to background
myThread.Start(...);
Microsoft의 "HOWTO : Stop Multiple Threads"기사 : http://msdn.microsoft.com/en-us/library/aa457093.aspx
다음 코드를 시도해 볼 수 있습니다.
Environment.Exit(Environment.ExitCode);
나는 내 소프트웨어에서 비슷한 문제를 겪었지만 불행히도 백그라운드에서 스레드가 작동하도록 만드는 것만으로는 문제가 해결되지 않았습니다. 실제로 스레드가 데이터를 가져 오는 동안 (주 소프트웨어는 데이터 기반 임) 응용 프로그램을 닫으면 Windows 오류가 발생하여 디버깅 메시지가 나타납니다.
그래서 실제로 나를 위해 일한 것은 :
1 단계 : 모든 스레드가 다음과 같은 백그라운드에서 실행되도록합니다.
Thread aThread = new Thread(MethodName);
aThread.IsBackground = true; //<-- Set the thread to work in background
aThread.Start();
2 단계 : 양식 / 응용 프로그램의 닫기 작업에서 다음과 같은 Environment.Exit 메서드를 호출합니다.
Environment.Exit(Environment.ExitCode);
이것은 메모리 누수없이 완벽하게 관리 된 메모리를 유지했습니다.
도움이 되었기를 바랍니다.
이것은 당신이 연 모든 스레드에서 작동합니다.
protected override void OnExiting(Object sender, EventArgs args)
{
base.OnExiting(sender, args);
Environment.Exit(Environment.ExitCode);
}
이것은 나를 위해 일을 마쳤습니다.
사용하는 대신:
Application.Exit()
다른 스레드를 열어두면 다음을 사용해보십시오.
Environment.Exit(Environment.ExitCode);
다음은 애플리케이션을 강제로 닫는 가장 좋은 방법입니다.
(Process.GetCurrentProcess()).Kill()
문제 Environment.Exit
는 메인 스레드에 있지 않으면 작동하지 않는다는 것입니다. 또한 때때로 스레드가 잠 깁니다.
프로그램이 제대로 닫히지 않는 주된 이유는 양식이 자체 (및 생성 된 모든 개체)를 삭제할 수 없기 때문입니다. 이것을 고치는 것은 훨씬 더 어렵습니다. 가능한 dispose 핸들러가 먼저 호출 될 때까지 잠시 기다린 후 위 코드를 실행하는 것이 좋습니다.
참고 URL : https://stackoverflow.com/questions/2688923/how-to-exit-all-running-threads
'IT Share you' 카테고리의 다른 글
pip install PIL은 virtualenv에 설치되지 않습니다. (0) | 2020.12.13 |
---|---|
Spring Boot-실행중인 포트를 얻는 방법 (0) | 2020.12.13 |
두 개의 동일한 LinearLayouts로 화면을 분할하는 방법은 무엇입니까? (0) | 2020.12.13 |
현재 bash 세션을 기록에 저장하지 마십시오. (0) | 2020.12.13 |
IHttpActionResult 형식 또는 네임 스페이스를 찾을 수 없습니다. (0) | 2020.12.13 |