1.簡述
一般一個程序一個進程,代碼是存在進程中的,進程本身不執行代碼, 執行代碼的是線程。
一般一個進程裡就一個線程。(一個商店就一個老板娘。)
進程就是在內存中開辟了一個空間。代碼,圖片。。等就存在這個空間裡。代碼線程去執行。
默認只有一個線程。
復制代碼 代碼如下:
systerm.threading //線程操作的類在這個命名空間下。
2.前台線程與後台線程。
開啟一個線程,就是創建一個線程對象即可。
線程默認情況下都是前台線程。
要把所有的前台線程執行完後,程序才會退出。
進程裡默認的線程叫主線程或者默認線程,或UI線程。
後台線程,只要所有的前台線程結束,所有的後台線程就直接結束。
復制代碼 代碼如下:
Thread th = new Thread(Sum);
th.Name ="線程1"; 給線程取名。調試的時候可以在輸出中看到具體名稱。
th.IsBackground = true;
th.Start();
th.Abort(); 強行終止線程。
Thread.Sleep(1000); 暫停線程,單位是毫秒
Thread cuTh = Thread.CurrentThread 得到當前線程的引用。Thread類型。
TextBox.CheckForIllegalCrossThreadCalls = false; //關閉空間的跨線程訪問檢查。 否則會出現如下錯誤
3.線程重入
同一個進程中的多個線程之間可以“並發”執行。
多個線程訪問同一資源, 可能造成不同步的情況,這個叫做線程重入。
應對此情況,可加鎖處理。
復制代碼 代碼如下:
private void CountNum()
{
lock (this)
{
for (int i = 0; i < 10000; i++)
{
int num = int.Parse(textBox1.Text.Trim());
num++;
textBox1.Text = num.ToString();
}
}
}
4.線程對象本質(委托)
4.1 無參方法
需要傳一個委托對象。復制代碼 代碼如下: ThreadStart ts = new ThreadStart(CountNum); Thread th = new Thread(ts); 等價於 Thread th = new Thread(CountNum); 本質傳的是一個委托對象。 (CountNum是無參方法) 4.2 有參方法
如果需要傳有參方法。
則是創建的ParameterizedThreadStart 的委托對象。
傳參是在Start方法中傳入;start方法有兩個重載。
小伙伴們是否對.net中使用多線程有所了解了呢,如有疑問,請留言。