2012-04-26 2 views
1

내 응용 프로그램에 이상한 오류가 발생했습니다. 단일 백그라운드 스레드와 여러 개의 일반 스레드가 있습니다. 응용 프로그램을 닫으면 모든 일반 스레드가 결국 종료되고 배경은 계속 작동합니다.종료 응용 프로그램에서 백그라운드 스레드가 닫히지 않음

병렬 스택을 검사했는데 백그라운드 스레드 만 여전히 작동합니다.

내부에서 백그라운드 스레드를 종료 할 수 있도록 응용 프로그램이 종료되고 있는지 어떻게 확인할 수 있습니까?

+0

이 항목을 다시 확인하십시오. bg 스레드는 종료시 항상 종료되어야합니다. 그것은 정말로 Quit를 막고 있습니까? 아니면 뭔가를 기다리고있는 주 스레드입니까? –

+1

이것은 거꾸로하고 있습니다. 간단하고 신뢰할 수있는 방법은 앱이 스레드에 종료를 알리는 것입니다. AutoResetEvent로 쉽게 완료됩니다. Thread.IsBackground는 무례한 중단을 요구하는 가장 좋은 방법입니다. –

+0

'Thread.IsBackground = true;'인 경우 이와 같은 문제가 없어야합니다. 나는 아직 아무 것도 보지 못했다. –

답변

0

응용 프로그램에 백그라운드 스레드에 대한 참조가있는 경우 응용 프로그램 종료시 thread.Abort() 메서드를 호출하십시오.

사용 된 프레임 워크에 따라 다른 옵션이 있습니다. 예를 들어 WPF에서 백그라운드 스레드는 이벤트를 처리 할 수 ​​있습니다.

new Thread(new ThreadStart(() => 
{ 
    var thread = Thread.CurrentThread; 

    Dispatcher.Invoke((Action)delegate 
    { 
     Exit += (obj, args) => thread.Abort(); 
    }); 

    while (true) ; // background thread is always busy 
})).Start(); 
관련 문제