C# 控制台线程池未执行

C# 控制台线程池未执行,c#,multithreading,C#,Multithreading,我很难理解为什么使用以下方法无法输出任何内容: class Program { static int m_Active = 500; static void Main(string[] args) { ThreadPool.SetMaxThreads(5, 5); Enumerable.Range(1, m_Active).ToList<int>() .ForEach(i => ThreadPool

我很难理解为什么使用以下方法无法输出任何内容:

class Program
{
    static int m_Active = 500;
    static void Main(string[] args)
    {
        ThreadPool.SetMaxThreads(5, 5);
        Enumerable.Range(1, m_Active).ToList<int>()
            .ForEach(i => ThreadPool.QueueUserWorkItem((o) => { DoWork(i); }));
    }

    private static void DoWork(int i)
    {
        new Action(() => { Console.WriteLine(i); }).Invoke();
        if (Interlocked.Decrement(ref m_Active).Equals(0))
            new Action(() => { Console.WriteLine("Done"); }).Invoke();
    }
}
类程序
{
静态int m_活动=500;
静态void Main(字符串[]参数)
{
线程池.SetMaxThreads(5,5);
可枚举的.Range(1,m_活动).ToList()
.ForEach(i=>ThreadPool.QueueUserWorkItem((o)=>{DoWork(i);}));
}
专用静态无效工作(int i)
{
新操作(()=>{Console.WriteLine(i);}).Invoke();
if(联锁减量(参考m_激活)。等于(0))
新操作(()=>{Console.WriteLine(“Done”);}.Invoke();
}
}

因为程序在有时间执行线程之前终止。添加一个简单的

Console.ReadLine();

Main的末尾
方法应该很好。

我不明白你为什么不明白。你试过调试它吗?发生什么事了?是的。问题的关键在于ThreaPool线程是后台线程,因此它们不会阻止进程退出。