请考虑以下代码。
在主要
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所以为什么它们会出现在我的输出中? 如果有人可以指导我参考或预订我可以获得线程池工作的例子,那也很好。
答案 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,表示多个线程可以读取,或 写给溪流。
ThreadPool的线程是后台线程,但是它们可以访问静态Console
类并调用它的静态方法WriteLine
并写入输出。
您可以在C#here
中了解有关线程的更多信息答案 1 :(得分:1)