默認情況下,顯示創建的線程都是前台線程,進程會等待內部所有的前台線程執行完才會結束退出
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程序關閉,但是還在占用內存,就很快定位到是某前台線程未執行完成。