2012-03-14 7 views
5

전경 작업을 만들지 못하는 것 같습니다. 내 메인 스레드는 다른 스레드를 호출 한 다음 종료합니다. 다른 스레드 영원히 실행전경 작업을 만드는 방법은 무엇입니까?

void MainThreadMain() 
{ 
    task_main = Task.Factory.StartNew(() => OtherThread()) ; 
    return; 
} 

void OtherThread() 
{ 
    while(true) 
    { 
    TellChuckNorrisJoke(); 
    } 
} 

어떻게 심지어 메인 스레드를 죽은되어 실행 task_main이 계속 보장 할 수 있습니다 생각? 내가 위원장을 가정 는 수행

task_main.IsBackgorund = false; 

하지만 그런 옵션 : 내 메인 스레드를 만들 수 있습니다 \는 전경 모드에 전달하는 것이 내 다른 스레드에서 신호를 기다릴 수 있습니다. 그러나 그것은 바보 같다.

+1

스레드를 사용하지 않으므로 * 반드시 * 확인하십시오. 물론 OtherThread()를 직접 호출 한 후 이름을 바꾸면됩니다. –

+2

이 게시물을 참조하십시오. http://stackoverflow.com/questions/6156878/can-threads-started-by-tasks-parallel-library-act-as-foreground-threads – Krishna

답변

5

명백한 질문은 다음과 같습니다. 주 스레드에서 작업하지 않는 이유는 무엇입니까?

이 옵션이 없다고 가정하면 Thread이 아닌 Task을 사용해야합니다. 그러면 다음을 설정할 수 있습니다.

Thread.IsBackground = false; 

이렇게하면 작업자 스레드가 실행되는 동안 응용 프로그램이 종료되지 않습니다.

+1

서비스를 만들고 있습니다. 서비스 OnStart 메서드는 다른 스레드를 호출하여 반환한다고 가정합니다. 프로그램을 계속 유지할 스레드가 없으면 종료됩니다. – Nahum

+2

아! Windows 서비스는 [Service Control Manager] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms685150(v=vs.85).aspx)에 의해 제어됩니다. 따라서 정상적인 "주 스레드"가 없습니다. 'OnStart'는 SCM에 의해 호출되며 당신은 그것이 신속하게 리턴되어야한다는 점에서 정확합니다. 그래서 예,'Thread' ('Task'가 아닙니다)를 시작하는 것이 합리적입니다. 또한 OnPause와 OnStop을 구현해야합니다. [MSDN : Windows 서비스 응용 프로그램] (http://msdn.microsoft.com/en-us/library/y817hyb6.aspx)을 참조하십시오. –

관련 문제