2012-05-07 35 views

回答

4

您可以使用ParameterizedThreadStart啓動一個帶參數的線程。

實施例:

Thread newThread = new Thread(myObj.DoMethod); 
newThread.Start(parameter); 

雖然,我通常最終使用的lambda

Thread newThread = new Thread(() => myObj.DoMethod(param1, param2, param3)); 
newThread.Start(); 

這可以更方便,因爲ParameterizedThreadStart採用單個object作爲參數。這很少是我想要的。

+0

()=>那是什麼宏? (不知道來自java) –

+0

'=>'符號是一個[lambda表達式](http://msdn.microsoft.com/en-us/library/bb397687.aspx)這是編寫匿名函數的簡短方法。 –

2

你可以使用一個簡單的Action<T>那然後調用的參數的方法,只是用一種封閉:

var thread = new Thread(() => 
{ 
    CallSomeMethod(someParam); 
}); 
0

這樣做的更多的語言無關的方式是,當該方法只能採取一個參數,你有一個以上的數據塊,創建具有屬性的新類爲每個你想,然後就參數傳遞該類的一個實例。 (這是你看到的與事件處理相關的對象EventArgs完成的事情。)

話雖如此,使用lambdas的閉包,正如別人所說的那樣,是一種相當流暢和簡單的做事方式,在實踐中方便。