一、進程/線程
進程:系統進行資源分配和調度的一個獨立單位。(存資源)
線程: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線程創建的,所以創建的線程是沒法調用的,所以一開始程序會報錯, 只需要關閉控件的跨線程訪問的檢查即可.