다음 코드는 응용 프로그램을 종료하지 않습니다. 어떻게 응용 프로그램을 종료하고 실행중인 모든 스레드가 닫혀 있는지 확인하십시오.실행중인 모든 스레드를 종료하는 방법은 무엇입니까?
foreach (Form form in Application.OpenForms)
{
form.Close();
}
Application.Exit();
다음 코드는 응용 프로그램을 종료하지 않습니다. 어떻게 응용 프로그램을 종료하고 실행중인 모든 스레드가 닫혀 있는지 확인하십시오.실행중인 모든 스레드를 종료하는 방법은 무엇입니까?
foreach (Form form in Application.OpenForms)
{
form.Close();
}
Application.Exit();
코드에는 스레드를 사용하지 않았지만 스레드가 있다고 가정 해 봅시다.
Thread myThread = new Thread(...);
myThread.IsBackground = true; // <-- Set your thread to background
myThread.Start(...);
A : 마이크로 소프트에서 기사 "HOWTO : 다중 스레드를 정지"응용 프로그램이 종료가, 예를 들어,이 때를 시작하기 전에 백그라운드 스레드에 그들 모두를 설정해야합니다 모든 스레드를 닫으려면, 그들은 자동으로 종료됩니다 : http://msdn.microsoft.com/en-us/library/aa457093.aspx
는 다음과 같은 코드를 시도 할 수 있습니다 :
Environment.Exit(Environment.ExitCode);
이것은 당신이 열린 모든 스레드 작동합니다.
protected override void OnExiting(Object sender, EventArgs args)
{
base.OnExiting(sender, args);
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.ExitCode);
과 같은 종료 메서드.이 메모리 관리 pe rfectly, 메모리 누수없이.
희망이 도움이됩니다.
대신 사용 :
이것은 나를 위해 할 일있어
Application.Exit()
열려있는 다른 스레드 잎, 사용해보십시오 : 당신이 스레드를 사용 할
Environment.Exit(Environment.ExitCode);
나는 복제 할 뜻이 없다는 것을 유감스럽게 생각합니다. Somdip Dey의 대답이 나를 위해 일하고있다. – Jimmy
@monkey_boys 당신의 코드? – Kiril