最主要區別:
1.Thread 是啟動一個線程,但是沒有參數。
2.ParameterThreadStart 線程可以接受一個輸入參數
ThreadStart:
ThreadStart這個委托定義為void ThreadStart(),也就是說,所執行的方法不能有參數。
ThreadStart threadStart=new ThreadStart(ProcessData); Thread thread=new Thread(threadStart); thread.Start(); public void SayHelloToXiaohouye() { string strName="My name is Xiaohouye";
Console.Write("Hello "+strName); }
上面很簡單的例子,我們用定義了一個ThreadStart類型的委托,這個委托制定了線程需要執行的方法: SayHelloToXiaohouye,在這個方法裡聲明一個變量,並輸出.這就構成了最簡單的多線程的例子,一般情況下,我們都是用這個的。
ParameterThreadStart:
ParameterThreadStart的定義為void ParameterizedThreadStart(object state),使用這個這個委托定義的線程的啟動函數可以接受一個輸入參數,具體例子如下 :
ParameterizedThreadStart threadStart=new ParameterizedThreadStart(SayHelloToXiaohouye) Thread thread=new Thread() ; thread.Start("Xiaohouye");
//注意參數一定要用object 類型,否則報錯 public void SayHelloToXiaohouye(object name) {
//使用時候需要轉換 Console.Write("Hello my name is {0}",name.ToString()); }
看了一個參數的例子,下面我們來看下多個參數的例子
,我們通過把多個參數組合到一個類中,然後把這個類的實例作為參數傳遞,就可以實現多個參數傳遞,廢話不多說,看代碼:
public class AddParameter { public string a=string.Empty;
public string b=string.Empty; public AddParameter(string name1, string name2) { a = name1; b = name2; } } #endregion class Program { static void Main(string[] args) { Console.WriteLine("***** Adding with Thread objects *****"); Console.WriteLine("當前線程為:{0}", Thread.CurrentThread.ManagedThreadId); AddParameter p = new AddParameter("xiaohouye", "xiaowangzi"); Thread t = new Thread(new ParameterizedThreadStart(Add)); t.Start(p); Console.ReadLine(); } #region Add method
//組合參數 static void Add(object data) { if (data is AddParams) { Console.WriteLine("當前線程為:{0}",Thread.CurrentThread.ManagedThreadId); AddParameter ap = (AddParameter )data; Console.WriteLine("{0} + {1} is {2}", ap.a, ap.b, ap.a + ap.b); } } #endregion } }