---------------------- Windows Phone 7手機開發、 .Net教育訓練、期待與您交流! ----------------------
産生一個線程的4個步驟:
1編寫産生線程所要執行的方法
2引用System.Threading命名空間
3執行個體化Thread類,并傳入一個執行線程所要運作的方法的委托(這時候這個線程已經産生,但是還沒有運作)
4調用Thead示例的Start方法,标記該線程可以被CPU執行了,具體執行時間由CPU決定。
前台線程和背景線程(預設線程為前台線程)
前提線程:隻要所有的前台線程都關閉才能完成程式關閉
背景線程:隻要所有的前台線程結束,背景線程自動結束。
為線程建立一個方法
public void CountTime()
{
for (int i = 0; i <= 999999999; i++)
{
}
MessageBox.Show("循環完畢!");
}
using System.Threading;//導入名稱空間
//建立委托
private void btnMulThread_Click(object sender, EventArgs e)
{
//建立線程對象,傳入方法
Thread thread = new Thread(new ThreadStart(CountTime));
thread.IsBackground = true;//設定為背景線程
thread.Start();//還隻執行(由CPU決定)
}
方法重入的問題
//線程調用方法
//改變本文框的值
void ChangeText()
{
for (int i = 0; i < 1000; i++)
{
int a = int.Parse(txtNumber.Text.Trim());
Console.WriteLine(Thread.CurrentThread.Name + ",a=" + a + ",i=" + i.ToString());
a++;
txtNumber.Text = a.ToString();
}
}
//方法重入問題
private void btnPromble_Click(object sender, EventArgs e)
{
//執行個體化線程對象1
Thread thread1 = new Thread(ChangeText);
thread1.IsBackground = true;
thread1.Name = "t1";
thread1.Start();
//執行個體化線程對象2
Thread thread2 = new Thread(ChangeText);
thread2.IsBackground = true;
thread2.Name = "t2";
thread2.Start();
}
發現最後文本框的值是1017,原因是線程間的調用,當t1調用的時候,t2來調用
然後取值相同,重複了一遍。
傳遞帶參數的線程
//帶一個參數的調用線程-----------------------------------------------------------------
//線程調用方法
//顯示文本框的名字
void Display(object name)
{
if (name != null)
MessageBox.Show("name:" + name.ToString());
else
MessageBox.Show("null");
}
//顯示文本框姓名
private void button1_Click(object sender, EventArgs e)
{
Thread thread = new Thread(Display);
thread.Start(txtName.Text.Trim());
}
//帶多個參數的調用線程-----------------------------------------------------------------
//顯示文本框的名字
void Display2(object li)
{
List list = li as List;
if (list != null)
{
foreach (string s in list)
{
MessageBox.Show(s);
}
}
else
{
MessageBox.Show("Null");
}
}
//帶多個參數的調用線程
private void btnMuliParmar_Click(object sender, EventArgs e)
{
Thread thread = new Thread(Display2);
thread.Start(new List { "劉德華", "張傑", "楊幂" });
}
自定義線程類
class MyThread
{
//-----------------------執行不帶參數的方法
ThreadStart ts;
public MyThread(ThreadStart ts)//要求使用者new的時候傳入方法委托
{
this.ts = ts;//将委托指派給全局變量ts
}
public void Start()//調用線程
{
ts();//調用委托執行委托裡面的方法(不帶參數)
}
//-----------------------執行帶參數的方法
ParameterizedThreadStart pts;
public MyThread(ParameterizedThreadStart pts)//要求使用者new的時候傳入方法委托
{
this.pts = pts;//将委托指派給全局變量pts
}
public void Start(object o)//調用線程
{
pts(o);//調用委托執行委托裡面的方法(帶參數)
}
}
---------------------- Windows Phone 7手機開發、 .Net教育訓練、期待與您交流! ----------------------
詳細請檢視: http://net.itheima.com/