2012-03-14 38 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