2012-03-14 4 views
5

Nie mogę utworzyć zadania na pierwszym planie. mój główny wątek ma nazywać się innym wątkiem, a następnie wyjść. druga nitka przypuszczać, aby uruchomić zawszeJak utworzyć zadanie na pierwszym planie?

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

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

jak mogę zapewnić task_main będzie nadal działa nawet to główny wątek jest martwy? Przypuszczałem il zrobić:

task_main.IsBackgorund = false; 

ale nie taka opcja: \ mogę uczynić mój główny wątek czekać sygnał z innego mojego wątku, który przeszedł do trybu planie. ale to jest głupie.

+1

Zapewniasz to przez * nie * za pomocą wątku. Po prostu wywołaj bezpośrednio OtherThread(), oczywiście po zmianie jego nazwy. –

+2

ten post może pomóc. http://stackoverflow.com/questions/6156878/can-threads-started-by-tasks-parallel-library-act-as-foreground-threads – Krishna

Odpowiedz

5

Oczywistym pytaniem jest: dlaczego nie uruchamiasz pracy nad głównym wątkiem?

Zakładając, że nie jest to opcja, należy użyć Thread, a nie Task. Następnie możesz ustawić:

Thread.IsBackground = false; 

Pozwoli to zapobiec zakończeniu aplikacji, gdy wątek roboczy jest uruchomiony.

+1

Tworzę usługę. jak rozumiem, metoda OnStart usługi zakłada wywoływanie innego wątku i powrót. jeśli nie ma wątku, który utrzyma program przy życiu, zostanie zakończony. – Nahum

+2

Ah! Usługa systemu Windows jest kontrolowana przez [Menedżera kontroli usług] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms685150 (v = vs.85) .aspx). Jako taki nie ma normalnego "głównego wątku". 'OnStart' jest wywoływany przez SCM i masz rację, że musi szybko wrócić. Więc tak, ma sens rozpoczęcie "wątku" (a nie "zadania"). Będziesz także musiał zaimplementować 'OnPause' i' OnStop'. Zobacz [MSDN: Windows Service Applications] (http://msdn.microsoft.com/en-us/library/y817hyb6.aspx). –