通常,如果您想等待子线程完成,那么您需要添加一个x.Join();
行(其中x是您的线程的变量),无论您希望主线程停止并等待孩子完成。
编辑:所以,是的,主线程将退出,除非以下三种情况之一发生: 一)产生的线程的主线程代码的其余部分之前完成(如果你添加任何)
b)你有一个等待线程完成的条件(例如我提到的Join语句,但也有其他方法)。
c)主线程进入半无限循环(如游戏/图形引擎)。
在您的裸机示例中,它肯定会退出(给出您的问题参数,后台线程)。编辑2:对不起,我似乎躲过了你的第二个问题(实际上只考虑整个背景线程)。如果它是一个后台线程,它会按照我的解释退出,如果它是前台,那么它不应该(尽管我对前台线程没有太多经验,所以我不能肯定地说)。
所以要回答你的问题:是的,主线程退出。是的,如果孩子特别是后台线程,该过程也将退出。
编辑3:最终编辑,我保证。我只是想添加一些代码,让你可以证明自己的答案(这总是很高兴能够做到):
static void Main(string[] args)
{
Thread thready = new Thread(DoSomething);
thready.IsBackground = true;
thready.Start();
}
static void DoSomething()
{
while (true)
{
Console.Write("thread's looping \n");
}
}
通过翻转thready.IsBackground = true;
到thready.IsBackground = false;
你一直运行的程序(未退出直到线程)。将它保留为true将很快退出。 “
添加'Console.Write'并亲自查看 – 2012-03-04 15:13:42
问题#2有点多余。你首先询问它是否会退出,然后询问是否退出:“退出”还是“等待”?那么如果它退出,那么它就退出了。 – jlafay 2012-03-04 15:20:51
@jlafay子线程是否是后台线程是有区别的:)因此问题 – GETah 2012-03-04 15:22:47