第一次使用線程相關的東西就遇到一個很“奇怪”的問題,明明程式(或者說主線程)已經結束了,但是整個程式就是不退出,賴在進程列表裡面!因為以前從來沒遇到這個問題,而這個程式是我首次使用線程(土了點,呵呵),問題肯定是出在這裡了,因此寫了一個控制台程式進行驗證,代碼如下: 1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Net;
5 using System.Net.Sockets;
6 using System.Threading;
7
8 namespace Test
9 {
10 class Program
11 {
12 static void Main(string[] args)
13 {
14 Thread testThread = new Thread(new ThreadStart(Program.TestThread));
15 testThread.Name = "testThread";
16 testThread.Start();
17 }
18
19 static void TestThread()
20 {
21 while (true)
22 {
23 Thread.Sleep(0);
24 }
25 }
26 }
27 }
28
運行上面這個例子,由於線程testThread是個死迴圈,所以這個線程是不會退出的。但是我的期望是主線程一旦結束,就意味著程式要退出了,那麼那些輔助線程應該自動被結束才是。但顯然從上面的實驗代碼運行結果可以看出:只要存在任何一個活動線程,那麼進程就持續運行!
要解決這個問題也非常簡單,在Main函數的結尾添加一行:1 testThread.Abort();
那麼就一切正常了,不過感覺有點多此一舉,而且不明白為什麼這麼設計,系統完全可以自動幫我們這麼做了嘛,難道有什麼難以預料的不良後果嗎???
// update
糾正:應該是只要任何一個“前台”線程在運行,程式就無法退出