7
class Program
{
    public static void Main(String[] args)
    {
        var c = new C();
        var thread = new Thread(new ThreadStart(c.F));
        thread.Start();
        Console.WriteLine("Exiting main, but the program won't quit yet...");
    }
}
class C
{
    public void F()
    {
        for (int i = 0; i < 10; i++)
        {
            Console.WriteLine("Waiting {0}", i);
            Thread.Sleep(1000);
        }
        Console.WriteLine("Now the program will quit...");
    }
}

コンソールアプリケーションの内部で何が起こっているのでしょうか。コンソールアプリケーションは、他のスレッドが終了するのを待ってから終了します(ドキュメントへのポインタは正常です)。

注:これが基本的な質問であることはわかっています-私はいつもスレッドが終了するのを待つことに成功し、それを実行するインフラストラクチャがあるとは考えていませんでした...

4

2 に答える 2

11

すべてのフォアグラウンドスレッドが終了すると、プロセスは終了します

フォアグラウンドスレッドとバックグラウンドスレッドに関するThread.IsBackgroundのコメントから:

スレッドは、バックグラウンドスレッドまたはフォアグラウンドスレッドのいずれかです。バックグラウンドスレッドは、バックグラウンドスレッドがプロセスの終了を妨げないことを除いて、フォアグラウンドスレッドと同じです。プロセスに属するすべてのフォアグラウンドスレッドが終了すると、共通言語ランタイムはプロセスを終了します。残りのバックグラウンドスレッドはすべて停止され、完了しません。

于 2013-01-31T02:20:25.067 に答える
-1

実行中のスレッドがあるプロセスは、すべてのスレッドが終了するまで終了しません。したがって、メインスレッドが終了すると、別のスレッドが実行され、トレッドが終了するとプロセスが終了します。任意の時点でプログラムを終了するにはEnvironment.Exit(0); 動作するはずです。このステートメントはすべてのトレッドを終了し、プロセスは終了しますが、これは不適切な方法です。

于 2013-01-31T02:04:12.253 に答える