分別各自執行指定的程式區塊
每個程式區塊,將執行完畢後各自輸出結果
而不受干擾
使用命名空間
using System.Threading
出處參考,C#隨性筆記
先來看一下 下面範例
private void button2_Click(object sender, EventArgs e)
{ //利用for迴圈來產生5個執行緒
for (int i = 1; i <= 5; i++)
{
//建立執行緒
//並建立執行緒 subthread
//執行的目的方法指定為 work
Thread subThread = new Thread(new ThreadStart(work));
//這一行特別講解上行結構
//上面建立Thread物件並委派 縮寫法
//如果方開建立,則如下
//先建立ThreadStart 並指定方法work
//
//ThreadStart subThreadStart=new ThreadStart(work)
//在建立Thread
//
//Thread subThread=new Thread(subThreadStart);
subThread.Name = "SubThread" + i.ToString();//設定i=1~5名稱
subThread.Start();//執行Start方法,Start會呼叫 work
//分別呼叫5次,這5次分別執行 不收干擾
}
}
static void work()
{
//遇到SubThread2延遲15秒
if (Thread.CurrentThread.Name == "SubThread2")
{
Thread.Sleep(15000);//等待15秒
MessageBox.Show("15秒到了");
}
//遇到SubThread1延遲10秒
else if (Thread.CurrentThread.Name == "SubThread1")
{
Thread.Sleep(10000);//等待10秒
MessageBox.Show("10秒到了");
}
MessageBox.Show("Thread State;" + Thread.CurrentThread.ThreadState.ToString());
MessageBox.Show("目前執行Thread Name:" + Thread.CurrentThread.Name);
MessageBox.Show("Thread ID:" + Thread.CurrentThread.ManagedThreadId);
}
上面呼叫SubThread1,SubThread2
將進入IF判斷 如果是 將延遲數秒後才執行
經由程式執行時~
3.4.5將 優先SHOW出
1.2 將晚10秒,15秒SHOW出
可以證明 這兩程序 將各自讀秒 獨立完成個別程式中的程式區塊
如果要帶入參數??
不可以使用ThreadStart
必須使用ParameterizedThreadStart
而副程式中的參數 必須要是 object
再轉換成 各種形式
下面範例將 套入參數部分
private void button3_Click(object sender, EventArgs e)
{
for (int I = 1; I <= 5; I++)
{
//帶入參數使用ParameterizedThreadStart副程式標籤 必須是object
Thread GO = new Thread(new ParameterizedThreadStart(TTTT));
GO.Name = "myname=" + I.ToString();
GO.Start("No" + I.ToString());////呼叫TTTT並帶入摻數NO1~NO5
}
}
static void TTTT(object R)//只能是object
{
string son = (string)R;//再將object轉成要的型態
if (son == null)
{
MessageBox.Show("轉型失敗");//如果再轉型有問題 立即顯示
}
if (Thread.CurrentThread.Name == "myname=2")
{
Thread.Sleep(10000);//如果是myname=2 讓他等10秒在SHOW出
}
MessageBox.Show("傳入的參數R=" + R.ToString());
MessageBox.Show("Thread.State=" + Thread.CurrentThread.ThreadState.ToString());
MessageBox.Show("Thread.Name=" + Thread.CurrentThread.Name);
MessageBox.Show("Thread.ID=" + Thread.CurrentThread.ManagedThreadId);
}
沒有留言:
張貼留言