控制台应用程序可以保持活着直到它完成工作吗?

时间:2008-09-20 04:55:01

标签: .net multithreading

我刚刚阅读了Thread.IsBackground,如果我理解正确,当它设置为false时,线程是一个前台线程,这意味着它应该保持活着,直到它完成工作,即使该应用已退出。现在我使用winform应用程序对其进行了测试,它按预期工作,但是当与控制台应用程序一起使用时,该过程不会保持活动状态,而是立即退出。 Thread.IsBackground与控制台应用程序的行为是否与winform应用程序不同?

3 个答案:

答案 0 :(得分:2)

Thread.IsBackground属性仅标记线程是否应阻止进程退出。在某种显式退出之前,它不会执行任何魔法来保持线程活着。

引用Thread.IsBackground Property MSDN(强调我的):

  

线程是后台线程或前台线程。后台线程与前台线程相同,除了后台线程不会阻止进程终止。 一旦属于某个进程的所有前台线程都已终止,公共语言运行库就会结束该进程。任何剩余的后台线程都会停止并且不会完成。

为了让您的控制台应用程序保持活动状态,您需要进行某种循环,直到您要求它通过标志或类似方式停止。 Windows Forms应用程序内置了它,因为它们的消息泵(我相信)。

答案 1 :(得分:1)

我相信使用基于winforms的应用程序,您可以获得一个单独的线程来处理消息传递,因此如果“主”线程退出,您仍然有一个线程可以使进程保持活动状态。使用控制台应用程序,一旦主要退出,除非您启动了前台线程,否则该过程也会终止。

答案 2 :(得分:0)

恕我直言,你应该更清楚地了解你的应用程序的预期语义,并故意< thread> .Join。