2011-01-17 5 views
3

스레드가 많은 스레드가있는 다중 스레드 C# "콘솔"응용 프로그램이 있습니다. 모든 스레드가 종료됩니다. 응용 프로그램이 정상적으로 종료하는 시간의 90 % 하지만 응용 프로그램 복사본이 남아있는 시간의 10 %는 여전히 콘솔이 열려 있습니다.모든 스레드가 종료 된 후 C# 프로세스가 잔뜩 남음

Visual Studio 2010을 통해이 기능에 연결하고 중단 기능을 사용하여 중단하고 두 개의 "빈"스택 프레임을 표시합니다. 하나는 Main 용이고 다른 하나는 응용 프로그램에서 만든 스레드 중 하나입니다. 스택에는 아무 것도 없습니다. Visual Studio에서는 이러한 스레드 중 하나를 클릭하면 "소스 코드를 스레드에서 사용할 수 없습니다"라고 말하며 "dissamled code view"링크를 제공합니다. 그걸 클릭하면 "이 코드에는 디스 어셈블 된 코드를 사용할 수 없습니다"라는 메시지가 표시됩니다.

내가 잘못 생각한 아이디어가 있습니까?

+1

디버거 옵션에서 내 코드 만 비활성화하고 다시 시도하십시오. – SLaks

+0

명시 적으로 프로세스를 종료하려면 Environment.Exit을 호출 하시겠습니까? –

+0

그것은 이미 내가 가진 문제처럼 보입니다. 그러나 제 경우에는 디버깅을 일시 중지 할 방법이 없습니다 !! + Fav. 그런데 모든 스레드를 올바르게 분기하고 결합합니까? 보류중인 스레드의 스택 추적을 관리되는 코드까지 검사 할 수 있습니까? 예를 들어 부분적으로 관리되지 않는 세마포어에서 스레드가 차단 될 수 있습니다. –

답변

2

몇 분 후에 코드가 종료됩니다. 일부 .net helper thead 또는 가비지 콜렉션 스레드가 여전히 실행 중일 수 있습니다. 시간이 좀 걸릴 수 있습니다.

디버그 빌드 또는 릴리스 빌드를 실행하고 있으며 프로세스가 디자인 목적으로 계속 실행중인 Visual Studio 호스트 프로세스 중 하나가 아닌지 확인하십시오.

+0

좋은 질문입니다. 나는 그것에 대해 조사 할 것이다. 내 문제를 설명 할 수있어. –

+1

Barfieldmv, 네가 맞다고 생각해. 대부분의 스레드는 예외를 잡아 내고 있었지만, 잡히지 않은 "IsisShutdown"예외는 던졌습니다. 스레드 스택 unwound 및 나는 Windows가 예외로 무엇을 해야할지 모르겠다 고 생각하고 두 "빈"스레드와 함께이 이상한 상태에 물건을 떠난다. 예외를보고하지는 않았지만 문제를 발견하면 문제가 발생하지 않는 것 같습니다. 기본적으로 경쟁 조건으로 인해 10 %의 시간이 소요됩니다. 감사! –

관련 문제