背景线程正在显示出来

时间:2014-12-27 18:16:17

标签: c# .net multithreading visual-studio-2013 threadpool

请考虑以下代码。

在主要

for (int i = 0; i <= 9; i++)
{
    ThreadPool.QueueUserWorkItem(Hi,i);
}

static void Hi(object arg)
{
    int n = (int)arg;
    Console.WriteLine("Thread ID:{0}  IsBackground:{1} HI Joshua.. You got:{2} ", Thread.CurrentThread.ManagedThreadId,
        Thread.CurrentThread.IsBackground,n);

}

我收到以下输出

Thread ID:10  IsBackground:True HI Joshua.. You got:2
Thread ID:10  IsBackground:True HI Joshua.. You got:3
Thread ID:10  IsBackground:True HI Joshua.. You got:4
Thread ID:10  IsBackground:True HI Joshua.. You got:6
Thread ID:10  IsBackground:True HI Joshua.. You got:7
Thread ID:10  IsBackground:True HI Joshua.. You got:8
Thread ID:10  IsBackground:True HI Joshua.. You got:9
Thread ID:11  IsBackground:True HI Joshua.. You got:5
Thread ID:13  IsBackground:True HI Joshua.. You got:1
Thread ID:12  IsBackground:True HI Joshua.. You got:0

我的问题是,因为线程池线程的背景属性为true所以为什么它们会出现在我的输出中? 如果有人可以指导我参考或预订我可以获得线程池工作的例子,那也很好。

2 个答案:

答案 0 :(得分:1)

  

控制台应用程序启动时,操作系统会自动启动   将三个I / O流与控制台相关联:标准输入流,   标准输出流和标准错误输出流。您的   应用程序可以从标准输入流中读取用户输入;写   正常数据到标准输出流;并将错误数据写入   标准错误输出流。这些流呈现给您   application作为Console.In,Console.Out和的值   Console.Error属性。默认情况下,In属性的值为   System.IO.TextReader对象,以及Out和Error的值   属性是System.IO.TextWriter对象。但是,你可以设置   这些属性到不代表控制台的流;对于   例如,您可以将这些属性设置为表示文件的流。   重定向标准输入,标准输出或标准错误   stream,调用Console.SetIn,Console.SetOut或Console.SetError   方法,分别。使用这些流的I / O操作是   synchronized,表示多个线程可以读取,或   写给溪流。

Console Class

ThreadPool的线程是后台线程,但是它们可以访问静态Console类并调用它的静态方法WriteLine并写入输出。

您可以在C#here

中了解有关线程的更多信息

答案 1 :(得分:1)

我想你可能会对background thread的内容感到困惑。

  

后台线程与前台线程相同,但后台线程不会阻止进程终止。

术语“后台线程”确实表明在后台运行的东西,但是用户看不到但是这与文档相反。

您可以阅读有关背景线程here的更多信息,以及有关一般herehere线程的详情。