2012-03-14 54 views
5

我似乎無法創建前臺任務。 我的主線程是調用另一個線程,然後退出。 其他線程想永遠運行如何創建前臺任務?

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

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

我怎麼能保證task_main將繼續運行,甚至主線程死了嗎? 我認爲金正日做:

task_main.IsBackgorund = false; 

,但沒有這樣的選擇:\ 我可以讓我的主線程等待從我的其他線程的信號,它傳遞給前臺模式。但那簡直是愚蠢的。

+1

您可以通過*不*使用線索來確保這一點。只需在重命名後直接調用OtherThread()即可。 – 2012-03-14 11:54:34

+2

這篇文章可能會有所幫助。 http://stackoverflow.com/questions/6156878/can-threads-started-by-tasks-parallel-library-act-as-foreground-threads – Krishna 2012-03-14 11:56:07

回答

5

顯而易見的問題是:爲什麼你不在主線上運行你的工作?

假設這不是一個選項,你應該使用Thread而不是Task。然後你可以設置:

Thread.IsBackground = false; 

這將阻止你的應用程序在工作線程運行時終止。

+1

我正在創建一項服務。據我所知,服務OnStart方法假設調用另一個線程並返回。如果沒有線程保持程序活着,它將退出。 – Nahum 2012-03-14 12:02:55

+2

啊! Windows服務由[服務控制管理器](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)。 – 2012-03-14 12:17:05