2011-03-08 2 views
2

나는이 주제에 대해 많은 조사를했으며 거의 ​​결과를 찾지 못했다. 내가 사용했던 엔진의 기준에 전경을 추가하는 것은 .Net의 스레딩에 대한 엔트리 레벨 문서의 톤을 유발합니다.포어 그라운드 스레드의 수를 .NET에서 결정할 수 있습니까?

현재 프로젝트에서 다르게 말할 때까지 휴면 상태 인 정적 클래스 내에 전경 스레드가 있습니다. 여기에는 처리해야하는 항목의 대기열이 포함되며 항목 응용 프로그램은 모든 항목을 처리하지 않고 닫을 수 없습니다. 지금 당장은 스레드에게 새로운 항목을 받아들이지 않고 모든 처리가 끝났을 때 닫아야한다고 알려주는 메서드가 있지만 팀의 모든 사람들이 메서드를 호출하는 것을 기억하지는 않습니다. 프로세스가 백그라운드에서 실행되는 동안 GUI를 닫는 것은 제 의견으로는 상당히 곤란한 일입니다. 대기중인 스레드가 마지막 전경 스레드인지 주기적 검사를 추가 할 수 있다면 메서드를 호출 할 수 있으며 클래스를 사용하는 다른 스레드에 대해 걱정할 필요가 없습니다.

+2

응용 프로그램의 깨끗하고 빠른 종료는 간단하지 않은 기능입니다. "프로세스가 종료되는 동안 GUI가 표시되지 않습니다"라고 생각하는 유일한 사람이라면 팀이 예상되는 응용 프로그램의 동작에 대해 동의하는 것으로 간주해야합니다. –

답변

0

System.Diagnostics.Process.Threads을 살펴보십시오. 그러면 현재 프로세스의 모든 스레드 컬렉션을 얻을 수 있습니다. 아마도 당신은 그걸로 뭔가를 할 수있을 것입니다. 어쩌면 당신의 것이 프로세스의 유일한 스레드인지 확인하는 것만 큼 간단할까요?

+0

작동하지 않습니다. ProcessThread를 Thread 객체에 매핑 할 수 없습니다. –

4

실행중인 스레드를 반복 할 수 없습니다. IsBackground = false가 있는지 알아낼 수 없습니다. 이것은 다소 기본적인 것이므로 반복되는 스레드는 정확한 결과를 산출 할 수 없습니다. 쓰레드는 동적으로 생성되고 종료되며, 프로세스를 "고정"하여 결과가 정확하다는 것을 보장 할 수 없습니다.

이 문제는 단순히 버그로 처리해야합니다. 명시적인 종료 요청을 무시하는 스레드의 코드에는 결함이 있습니다. 프로그래머가 올바르게 이해하기를 바라는 대신 명시 적으로 지정하는 것이 현명 할 것입니다. BackgroundWorker 클래스와 CancellationPending 속성을 사용합니다. 또는 CancellationToken 구조를 사용하는 .NET 4.0 Task 클래스. 프로그래머는 이러한 기능에 대해 무지하게 주장 할 수 없습니다. UI 코드에서이 권리를 얻도록주의하십시오. 교착 상태는 입니다. 매우입니다.

+0

여기에 동의해야합니다. 시스템 종료시 리소스를 해제하지 못한 프로그램은 버그가 있습니다. –

관련 문제