2012-03-14 38 views
5

Mi sembra di non riuscire a creare un'attività in primo piano. il mio thread principale è suppse chiamare un altro thread e quindi uscire. l'altro thread supponga di correre per sempreCome creare un'attività in primo piano?

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

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

come posso garantire task_main continuerà a funzionare anche quel filo principale è morto? Ho assunto il fare:

task_main.IsBackgorund = false; 

ma tale opzione: \ posso fare il mio thread principale ad attendere un segnale dal mio altro thread che è passato alla modalità primo piano. ma questo è semplicemente sciocco.

+1

Questo è garantito da * non * utilizzando una discussione. Chiama semplicemente OtherThread() direttamente, dopo averlo rinominato, ovviamente. –

+2

questo post può aiutare. http://stackoverflow.com/questions/6156878/can-threads-started-by-tasks-parallel-library-act-as-foreground-threads – Krishna

risposta

5

La domanda ovvia è: perché non si esegue il lavoro sul thread principale?

Supponendo che questa non sia un'opzione, è necessario utilizzare uno Thread non uno Task. Quindi è possibile impostare:

Thread.IsBackground = false; 

Questo consentirà di evitare l'applicazione di terminare, mentre il thread di lavoro è in esecuzione.

+1

Sto creando un servizio. come ho capito il metodo OnStart di servizio supponiamo di chiamare un altro thread e restituire. se non ci sono thread per mantenere vivo il programma, uscirà. – Nahum

+2

Ah! Un servizio Windows è controllato da [Service Control Manager] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms685150 (v = vs.85) .aspx). In quanto tale, non ha un normale "Main Thread". 'OnStart' è chiamato da SCM e tu sei corretto in quanto deve tornare rapidamente. Quindi sì, ha senso iniziare un 'Thread' (non un' Task'). Dovrai anche implementare 'OnPause' e' OnStop'. Vedere [MSDN: Applicazioni di servizio Windows] (http://msdn.microsoft.com/en-us/library/y817hyb6.aspx). –