多线程(三):检索线程对象

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();
        }
    }
原文地址:https://www.cnblogs.com/25miao/p/9865327.html