1.ThreadStart 線程執行帶參數的方法,new Thread(new ThreadStart(delegate { ThreadTask(firstPage, lastPage); })); 2.System.Threading.ParameterizedThreadStart其實沒有必要 ...
1.ThreadStart
線程執行帶參數的方法,new Thread(new ThreadStart(delegate { ThreadTask(firstPage, lastPage); }));
2.System.Threading.ParameterizedThreadStart
其實沒有必要,ThreadStart本來就是個委托,裡面又來了個匿名方法。多了一次方法的調用,雖然性能不會影響什麼,但看著很彆扭。c#有一個委托System.Threading.ParameterizedThreadStart,就是來做這事的,從名字上也可又看出來是帶參數的.
下麵是原型:
// 表示在 System.Threading.Thread 上執行的方法。
// 參數: obj: 包含該線程過程的數據的對象。
[ComVisible(false)]
public delegate void ParameterizedThreadStart(object obj);
下麵是代碼實例:
static void Test(object arg)
{
int n = (int)arg;//如果是數組等,可又做相應轉換
long r = 0;
for (int i = 0; i < n; i++)
{
r += i;
}
Console.WriteLine(r);
}
static void Main(string[] args)
{
int n = 1000 * 10000;
Thread t = new Thread(new ParameterizedThreadStart(Test));
t.Start(n);//多參數可又組成數組傳遞進去。
}
它在實例化時可以用帶有一個Object參數的方法作為構造函數的參數.為什麼是Object這樣的參數呢?很簡單,因為在.net中Object是所有類型的基類,用它可以表示Array(數組)、Interface(介面)、ValueType(值類型,如bool,byte,char,short,int,float,long,double等)、class(類)等.net中的類型。當然,這也意味著如果你要啟動一個線程,給它傳遞一個int類型參數時,必須在 啟動方法中進行相應的類型轉換。