2014-12-27 88 views
0

请考虑以下代码。背景线程正在显示出来

在主

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 

我的问题是,由于线程池线程具有背景属性真那么,为什么也会有越来越我的输出显示了? 如果有人能够引导我参考或书籍,我可以得到线程池工作的例子,这也将是很好的。

回答

1

我想你可能会感到困惑什么background thread是。

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

术语“后台线程”确实提示了一些在后台运行的东西,用户看不到,但那与文档相反。

您可以阅读更多关于后台线程here以及更多关于线程的更多信息herehere

1

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

Console Class

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

您可以了解更多关于线程在C#here

+0

ohh我看到...... – 2014-12-27 18:19:28