最主要區別:
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
}
}
