C#使线程保持活动状态,即使控制台应用程序退出

时间:2018-10-09 14:00:23

标签: c# multithreading parallel-processing console-application

我在c#中有一个控制台应用程序,它可以无休止地运行,看起来像这样:

class Program
{
    static void Main(string[] args)
    {    
        while(true)
        {
                var listOfIds = GetItemIds();
                Parallel.ForEach(listOfIds, new Parallel{ MaxDegreeOfParallelism = 15}, th => DoWork(th));
                Console.WriteLine("Iteration Complete");
        }
    }

    static void DoWork(int id)
    {
        //do some work and save data
        //...
    }

    static List<int> GetItemIds()
    {
        //return a list of ints.
    }       
}

当线程在“ DoWork”中时,它正在处理数据,对其进行修改并进行存储。该应用程序等待所有操作完成,然后再次进行新的迭代。

现在,如果关闭了控制台应用程序,则线程似乎无法完成其工作并因控制台应用程序而终止。 我认为使用“并行”创建的线程独立于主线程。即使我退出控制台应用程序,也可以使线程完成其工作吗?我应该使用其他东西而不是“并行”来创建线程吗?

1 个答案:

答案 0 :(得分:1)

关闭窗口后,控制台应用程序将终止所有线程。总是。没有办法解决。控制台窗口直接链接到该过程。

您可能希望使用Windows应用程序,它将对主应用程序循环有更精细的控制。这可能是Windows Service或WinForm / WPF类型的应用程序(如果您不需要的话,甚至不需要UI)。

如果您希望Windows应用程序仍然显示控制台-这有点不方便,但是您可以找到一个示例here