2010-04-22 7 views

답변

69

코드에는 스레드를 사용하지 않았지만 스레드가 있다고 가정 해 봅시다.

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

45

는 다음과 같은 코드를 시도 할 수 있습니다 :

Environment.Exit(Environment.ExitCode); 
13

이것은 당신이 열린 모든 스레드 작동합니다.

protected override void OnExiting(Object sender, EventArgs args) 
{ 
    base.OnExiting(sender, args); 
    Environment.Exit(Environment.ExitCode); 
} 
7

나는 내 소프트웨어에서 비슷한 문제를 겪었지만 불행히도 백그라운드에서 작동하도록 스레드를 만들면 문제가 해결되지 않았습니다. 실제로 스레드가 데이터를 가져 오는 동안 (주 소프트웨어는 데이터 기반입니다) 응용 프로그램을 닫으면 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, 메모리 누수없이.

희망이 도움이됩니다.

대신 사용 :

1

이것은 나를 위해 할 일있어

Application.Exit() 

열려있는 다른 스레드 잎, 사용해보십시오 : 당신이 스레드를 사용 할

Environment.Exit(Environment.ExitCode); 
+0

나는 복제 할 뜻이 없다는 것을 유감스럽게 생각합니다. Somdip Dey의 대답이 나를 위해 일하고있다. – Jimmy

관련 문제