class Program9
{
//检索线程对象
//停止所有前台线程后,运行时将停止所有后台线程,并关闭。
static Object obj = new Object();
private static void ShowThreadInformation(Object state)
{
lock (obj)
{
var th = Thread.CurrentThread;
Console.WriteLine("Managed thread #{0}: ", th.ManagedThreadId);
Console.WriteLine(" Background thread: {0}", th.IsBackground);
Console.WriteLine(" Thread pool thread: {0}", th.IsThreadPoolThread);
Console.WriteLine(" Priority: {0}", th.Priority);
Console.WriteLine(" Culture: {0}", th.CurrentCulture.Name);
Console.WriteLine(" UI culture: {0}", th.CurrentUICulture.Name);
Console.WriteLine();
}
}
static void Main(string[] args)
{
//从非托管代码进入托管的执行环境的所有线程--->后台线程
//替代:在线程池线程上自动执行基于任务的异步操作。 使用基于任务的异步操作Task并Task<TResult>类以实现基于任务的异步模式。
//线程池创建的线程都为 后台线程
ThreadPool.QueueUserWorkItem(ShowThreadInformation);
//主线程调用Thread构造函数创建的线程都为 前台线程
var th1 = new Thread(ShowThreadInformation);
th1.Start();
var th2 = new Thread(ShowThreadInformation);
//主线程调用Thread构造函数创建的线程 可单独设置为后台线程
th2.IsBackground = true;
th2.Start();
Thread.Sleep(500);
//主线程直接调用的均为 前台线程
ShowThreadInformation(null);
Console.ReadLine();
}
}