1. 程式人生 > >單執行緒的弊端,多執行緒基礎學習

單執行緒的弊端,多執行緒基礎學習

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;

namespace 執行緒學習
{
public partial class Form1 : Form
{
Thread th;
public Form1()
{
InitializeComponent();


}
//單執行緒的問題
//c#程式設計建立一個執行緒會分配程式一個主執行緒,該執行緒會用於窗體內各種控制元件的載入,控制
//當你執行以下程式時會佔用主執行緒,視窗的各種拖動等操作會停止,窗體假死,
//前臺執行緒:只有所有的前臺程式關閉,才能關閉執行緒
//後臺執行緒:只有所有的前臺程式關閉,後臺執行緒自動結束。

private void button1_Click(object sender, EventArgs e)
{
//解決方案
//建立多執行緒
//並將執行緒設定為後臺執行緒
th = new Thread(Test);//
// Test();
Thread.Sleep(3000);//單位ms,睡眠一段時間
th.IsBackground = true;

//標記這個執行緒就緒
th.Start();
//th.Abort();
//th.Start();//一個執行緒被終止後不能被重新start;

}
private void Test()
{
int length = 10000;
for (int i = 0; i < length; i++)
{
//Console.WriteLine(i);
textBox1.Text = i.ToString();//bug1.net下不允許跨執行緒的訪問
//解決
//bug2主執行緒關閉後。由於某些原因th這個執行緒沒有關閉,
//應該判斷這個執行緒是否null
//

 

}
}

private void Form1_Load(object sender, EventArgs e)


{
//取消跨執行緒的訪問
Control.CheckForIllegalCrossThreadCalls = false;//control是所有控制元件的基類
}

private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
//當你點選關閉窗體時判斷th是否null
if (th != null)
{
th.Abort();
}
}

}
}