스레드가 처리되지 않은 예외없이 코드 0 (0x0)으로 종료되었습니다.


97

내 C # 애플리케이션을 디버깅하는 동안 다음 문장이 많이 발생하는 것을 발견했습니다.

스레드-코드 0 (0x0)으로 종료되었습니다.

애플리케이션은 계속 작동하며 예외가 포착되거나 처리되지 않습니다.

응용 프로그램은 Windows 7 64 비트에서 실행되고 x86 플랫폼으로 디버깅됩니다.


1
그것이 당신의 스레드라고 확신합니까? 그렇다면 완료 될 것으로 예상하지 않습니까?
SLaks

답변:


142

이것은 단지 디버깅 메시지입니다. 출력 창을 마우스 오른쪽 버튼으로 클릭하고 선택을 취소하여 끌 수 있습니다 Thread Exit Messages.

http://msdn.microsoft.com/en-us/library/bs4c1wda.aspx

애플리케이션에서 프로그래밍하는 것 외에도 출력 창에는 다음에 대한 정보가 표시 될 수 있습니다.

  • 디버거가로드하거나 언로드 한 모듈입니다.

  • throw되는 예외입니다.

  • 종료되는 프로세스.

  • 종료되는 스레드.


10

음, 응용 프로그램에는 병렬로 실행되는 많은 스레드가있을 수 있습니다. 일부는 코더에 의해 실행되고 일부는 프레임 워크 클래스에 의해 실행됩니다 (특히 GUI 환경에있는 경우).

스레드가 작업을 완료하면 종료되고 존재하지 않습니다. 즉, 여기에는 놀라운 것이 없으며 신경 쓰지 말아야합니다.


내가 논의한 스레드는 내 것이 아니거나 내 애플리케이션에 속하지 않습니다. 그러나 내 응용 프로그램은 엄청난 양의 소멸 된 프로세스를 반환하는 Linux AIX 서버에 연결해야합니다. 이 서버가 작동하는지 (그리고 그 작업이 무엇인지) 명확하지 않지만 앞서 언급 한 스레드가 서버 동작에 영향을 미칠 수 있다고 생각합니다.
Gionata 2012 년

글쎄, 스레드가 실제로 응용 프로그램에 영향을 미칠 수도 있지만 메시지가 성공적으로 종료되었음을 알려줍니다. 따라서 실행되는 이유를 찾을 수 있지만 (디버그 메뉴 => 창 => 스레드) 이것은 정상입니다.

정상적으로 종료되지만 Linux 서버가 작동하지 않는 프로세스는 .net 프레임 워크 스레드의 부작용이 될 수 있습니다. 응용 프로그램에 다중 스레딩 구현에서 다양한 프로그래밍 오류가있을 수 있습니다. 가능할까요?
Gionata

모르겠어요. 이 linuw 서버는 .NET을 실행하고 있습니까? Mono를 사용하십니까? 실제로 당신의 문제는 무엇입니까? 사라진 프로세스?
Kek

예, 무의미한 프로세스로 인해 Linux 서버가 충돌합니다.
Gionata

7

BlueM의 수락 된 답변을 완료하려면 여기에서 비활성화 할 수 있습니다.

도구> 옵션> 디버깅> 일반 출력 설정> 스레드 종료 메시지 : 끄기


5
: BlueM의 허용 대답은 실제로는 간단한 해결책이있다 "당신은 출력 창에 마우스 오른쪽 버튼을 클릭하여 그 오프 스위치와 스레드 종료 메시지를 선택 취소 할 수 있습니다"
사이먼 MᶜKenzie

5

응용 프로그램이 스레드를 직접 또는 간접적으로 사용하는 경우 (즉, 타사 라이브러리에서와 같이이면에서) 스레드가 완료된 후 종료되는 것이 절대적으로 일반적입니다. 기본적으로 설명하는 내용입니다. 디버거에이 메시지가 표시됩니다. ... 원하지 않는 경우이 메시지를 표시하지 않도록 디버거를 구성 할 수 있습니다.

위의 내용이 도움이되지 않는 경우 문제가 정확히 무엇인지 확실하지 않으므로 자세한 정보를 제공하십시오.


1

프레임 워크는 사용자가 생성 한 각 창을 지원하는 스레드를 생성합니다 (예 : Form을 생성하고이를 .Show () 할 때). 창이 닫히면 스레드가 종료됩니다 (즉, 종료).

이것은 정상적인 동작입니다. 그러나 응용 프로그램이 스레드를 생성하고 이러한 스레드에 해당하는 스레드 종료 메시지가 많이있는 경우 (앱에서 고유 한 이름을 지정하여 스레드 이름으로 알 수 있음) 아마도 이것은 문제를 나타냅니다. 프로그램 로직 오류로 인해 스레드를 생성하지 않아야 할 때 앱에서 스레드를 생성합니다.

원본 포스터가 서버 충돌 문제와 관련하여 발견 한 내용을 알려주는 것은 흥미로운 후속 조치입니다. 이것과 아무 관련이 없을 것 같은 느낌이 듭니다만 ... 게시 된 정보로는 알 수 없습니다.


1

Linq 쿼리를 실행하면 추가 스레드가 생성 될 수 있습니다. 직접 실행 창에서 Linq 쿼리 컬렉션을 사용하는 코드를 실행하려고하면 디버거에서 사용할 수있는 스레드가 충분하지 않기 때문에 실행을 거부하는 경우가 많습니다.

다른 사람들이 말했듯이 스레드가 완료되면 종료되는 것은 완벽하게 정상입니다.


-1

나는 또한이 문제에 직면했으며 해결책은 다음과 같습니다.

  1. 오픈 솔루션 탐색
  2. Program.cs 파일을 두 번 클릭하십시오.

이 코드를 다시 추가했고 프로그램이 정확하게 실행되었습니다.

Application.Run(new PayrollSystem()); 
//File name this code removed by me accidentally.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.