通常、子スレッドが完了するのを待つ場合は、メインスレッドを停止させたい場合は、x.Join();
行(xはスレッドの変数)を追加します子供が完成するのを待つ。
EDIT:3例1が発生しない限り、そう、メインスレッドが終了します: a)に生成されたスレッドは、メインスレッドのコードの残りの部分が完了する前に、あなたがいずれかを追加した場合)(
b)にあなたスレッドが完了するのを待つ条件(私が言及したJoinステートメントなど、他の方法もあります)があります。
c)メインスレッドは半無限ループ(ゲーム/グラフィックスエンジンなど)に入ります。
あなたのベアボーンの例では、(あなたの質問のパラメータ、バックグラウンドスレッドを仮定して)確実に終了します。
EDIT2:申し訳ありませんが、私はあなたの2番目の質問を避けているようです(実際には、全体的にバックグラウンドスレッドとみなされていました)。バックグラウンドスレッドであれば、私が説明したように終了します。フォアグラウンドなら、それはすべきではありません(フォアグラウンドスレッドの経験はあまりないので、私は確かに言えません)。
質問に答えてください:はい、メインスレッドが終了します。はい、子が特にバックグラウンドスレッドの場合、プロセスも終了します。
EDIT3:最終編集でお約束します。 (出ない
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 = false;
からthready.IsBackground = true;
あなたは永遠に実行するプログラムを取得するトグルで:私はちょうどあなたが(行うことができるように、常にいいです)答えを自分で証明することができるようにいくつかのコードを追加したいですスレッドが行うまで)。それを真のままにしておくと、非常に迅速に終了します。
'Console.Write'を追加して自分自身を参照してください –
質問#2は少し冗長です。あなたはまずそれが終了するかどうか尋ね、それから終了するかどうかを尋ねる:「それは終了する」か「それは待つか」?さて、それが終了すると、それは終了します。 – jlafay
@jlafay子スレッドがバックグラウンドスレッドであるかどうかには違いがあるため:) – GETah