我刚刚阅读了Thread.IsBackground
,如果我理解正确,当它设置为false
时,线程是一个前台线程,这意味着它应该保持活着,直到它完成工作,即使该应用已退出。现在我使用winform应用程序对其进行了测试,它按预期工作,但是当与控制台应用程序一起使用时,该过程不会保持活动状态,而是立即退出。 Thread.IsBackground
与控制台应用程序的行为是否与winform应用程序不同?
答案 0 :(得分:2)
Thread.IsBackground
属性仅标记线程是否应阻止进程退出。在某种显式退出之前,它不会执行任何魔法来保持线程活着。
引用Thread.IsBackground Property MSDN(强调我的):
线程是后台线程或前台线程。后台线程与前台线程相同,除了后台线程不会阻止进程终止。 一旦属于某个进程的所有前台线程都已终止,公共语言运行库就会结束该进程。任何剩余的后台线程都会停止并且不会完成。
为了让您的控制台应用程序保持活动状态,您需要进行某种循环,直到您要求它通过标志或类似方式停止。 Windows Forms应用程序内置了它,因为它们的消息泵(我相信)。
答案 1 :(得分:1)
我相信使用基于winforms的应用程序,您可以获得一个单独的线程来处理消息传递,因此如果“主”线程退出,您仍然有一个线程可以使进程保持活动状态。使用控制台应用程序,一旦主要退出,除非您启动了前台线程,否则该过程也会终止。
答案 2 :(得分:0)
恕我直言,你应该更清楚地了解你的应用程序的预期语义,并故意< thread> .Join。