一、進程/線程
進程:系統進行資源分配和調度的一個獨立單位。(存資源)
線程:CPU調度和分派的基本單位。(執行)
一個進程可以有多個線程,一個線程可與同屬一個進程的其他線程共享進程所擁有的全部資源。
場景:超市。
/// <summary>
/// 單線程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button1_Click(object sender, EventArgs e)
{
//int sum = 0;
//for (int i = 1; i < 999999999; i++)
//{
// sum += i;
//}
//MessageBox.Show(sum.ToString());//執行完後,才能做別的操作
}
/// <summary>
/// 多線程
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void button3_Click(object sender, EventArgs e)
{
Thread thread = new Thread(TestThread);
thread.IsBackground = true;//設置為後台線程
thread.Start();
}
/// <summary>
/// 准備讓線程去調用
/// </summary>
private void TestThread()
{
int sum = 0;
for (int i = 1; i < 999999999; i++)
{
sum += i;
}
MessageBox.Show(sum.ToString());//執行完後,才能做別的操作
}
1 /// <summary> 2 /// 單線程 3 /// </summary> 4 /// <param name="sender"></param> 5 /// <param name="e"></param> 6 private void button1_Click(object sender, EventArgs e) 7 { 8 //int sum = 0; 9 //for (int i = 1; i < 999999999; i++) 10 //{ 11 // sum += i; 12 //} 13 //MessageBox.Show(sum.ToString());//執行完後,才能做別的操作 14 } 15 16 /// <summary> 17 /// 多線程 18 /// </summary> 19 /// <param name="sender"></param> 20 /// <param name="e"></param> 21 private void button3_Click(object sender, EventArgs e) 22 { 23 Thread thread = new Thread(TestThread); 24 thread.IsBackground = true;//設置為後台線程 25 thread.Start(); 26 } 27 28 /// <summary> 29 /// 准備讓線程去調用 30 /// </summary> 31 private void TestThread() 32 { 33 int sum = 0; 34 for (int i = 1; i < 999999999; i++) 35 { 36 sum += i; 37 } 38 MessageBox.Show(sum.ToString());//執行完後,才能做別的操作 39 }
二、前台線程/後台線程
1、進程裡面默認的線程叫做主線程(UI線程).
2、默認情況下,線程都是前台線程(所有的線程執行完畢後,程序才退出),如要將設置成後台線程(關閉窗口後,程序就結束),設置thead.IsBackground=true.
三、線程重入以及解決方法
1、demo2中textbox是由ui線程創建的,所以創建的線程是沒法調用的,所以一開始程序會報錯, 只需要關閉控件的跨線程訪問的檢查即可.