通常,如果您想等待子線程完成,那麼您需要添加一個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