4

簡単なコンソール アプリケーション (デバッグ モード) を書きましょう。

    static void Main(string[] args)
    {
        Process p = Process.GetCurrentProcess();

        IList<Thread> threads = new List<Thread>();
        Console.WriteLine(p.Threads.Count);
        for(int i=0;i<30;i++)
        {
            Thread t = new Thread(Test);
            Console.WriteLine("Before start: {0}", p.Threads.Count);
            t.Start();
            Console.WriteLine("After start: {0}", p.Threads.Count);
        }
        Console.WriteLine(Process.GetCurrentProcess().Threads.Count);
        Console.ReadKey();
    }

    static void Test()
    {
        for(int i=0;i<100;i++)Thread.Sleep(1);
    }

結果はどうなると思いますか?

[Q1] p.Threads.Count が Process.GetCurrentProcess().Threads.Count と異なるのはなぜですか?

4

1 に答える 1

5

キャッシュの結果が表示されないように、毎回プロパティProcess.Refresh()をフェッチする前に呼び出す必要があります。Threads

それを行うと、期待する結果が表示されます。

于 2012-06-26T22:34:53.557 に答える