C# Thread3——前台線程后台線程


默認情況下,顯示創建的線程都是前台線程,進程會等待內部所有的前台線程執行完才會結束退出

1.默認創建的線程都是前台線程

2.進程會等待所有的前台線程執行完而結束,如果還存在后台線程則會強行中斷並且退出。

3.如果關閉程序,但是還存在前台線程沒有結束,則程序並不會被完全關閉,任務管理器中還是可以看到進程。

3.通過設置Thread.IsBackground屬性來設置線程的是前台還是后台。

例1(兩個前台線程)

 

class Program
    {
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(Task1);
            Thread thread2 = new Thread(Task2);
            thread1.Start();
            thread2.Start();
        }
        private static void Task1()
        {
            Thread.Sleep(1000);
            Console.WriteLine("hello i am first");
        }
        private static void Task2()
        {
            Thread.Sleep(5000);
            Console.WriteLine("hello i am first");
        }
    }

 

控制台會等待兩個線程執行完才會退出

例1(Thread1前台,Thread2后台)

class Program
    {
        static void Main(string[] args)
        {
            Thread thread1 = new Thread(Task1);
            Thread thread2 = new Thread(Task2);
            thread1.Start();
            thread2.IsBackground = true;//設置2為后台線程
            thread2.Start();
        }
        private static void Task1()
        {
            Thread.Sleep(1000);
            Console.WriteLine("hello i am first");
        }
        private static void Task2()
        {
            Thread.Sleep(5000);
            Console.WriteLine("hello i am first");
        }
    }

則控制台在執行完Thread1之后就會自動退出,而此時Thread2還未執行完,由於他是后台線程所以被強制中斷

最后:如果程序定義了一個不會完成前台線程,主程序並不會正常結束,所以之前同事遇到一個WPF程序關閉,但是還在占用內存,就很快定位到是某前台線程未執行完成。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM