簡単なコンソール アプリケーションを書きましょう。
static void Main(string[] args)
{
IList<Thread> threads = new List<Thread>();
Console.WriteLine((Process.GetCurrentProcess().Threads).OfType<ProcessThread>().Where(thread => thread.ThreadState == ThreadState.Wait).Count());
for(int i=0;i<30;i++)
{
Thread t = new Thread(Test);
Console.WriteLine("Before start: {0}", (Process.GetCurrentProcess().Threads).OfType<ProcessThread>().Where(thread => thread.ThreadState == ThreadState.Wait).Count());
t.Start();
Console.WriteLine("After start: {0}", (Process.GetCurrentProcess().Threads).OfType<ProcessThread>().Where(thread => thread.ThreadState == ThreadState.Wait).Count());
}
Console.WriteLine((Process.GetCurrentProcess().Threads).OfType<ProcessThread>().Where(thread => thread.ThreadState == ThreadState.Wait).Count());
Console.ReadKey();
}
static void Test()
{
Thread.Sleep(0);
}
ご覧のとおり、プロセスで 30 の待機スレッドを作成しました。彼らはどこにいますか?MSDN:
ProcessThread を使用して、現在のプロセスに関連付けられているすべてのスレッドを取得します。