2014-01-15 27 views
0

是否可以在threadstart內傳遞一個參數來開始執行方法?在線程啓動內部傳遞參數

int value = 123; 
Thread t = new Thread(new ThreadStart(fail.DoWork(value))); 


Class fail 
{ 
    public void DoWork(int Value) 
} 

我還可以在DoWork中傳遞這個參數嗎?

回答

2

您可以嘗試

int value = 123; 
fail objfail = new fail(); 
var t = new Thread(() => objfail.DoWork(value)); 
t.Start(); 
+0

拋出錯誤「無過載爲 'DoWork的' 匹配委託 'system.threading.parameterizedthreadstart' – user759913

+0

編輯我的回答,請立即嘗試 – pravprab

0

我相信你也可以做拉姆達expession像...

Thread t = new Thread(new ThreadStart(() => fail.DoWork(value))); 

我花了一段時間來總結我的周圍拉姆達頭,但基本上什麼發生在上面的行是這樣的。

調用一個沒有參數的函數(正常調用可能有)。這由()表示。該函數的實際定義是在=>後面跟隨參數進行的調用。這與您完成以下操作相同。

currentMethodStartingTheThread() 
{ 
    Thread t = new Thread(new ThreadStart(CallAsParameterized()); 
} 

void CallAsParameterized() 
{ 
    int value = 123; 
    fail.DoWork(value); 
} 


Class fail 
{ 
    public void DoWork(int Value) 
    { do whatever with the parameter value) 
} 

通過lambda表達式的唯一真正區別在於,您不必使用參數明確寫入包裝函數。

0

我更喜歡這樣的語法:

int value = 123; 
var t = new Thread((ThreadStart)(() => fail.DoWork(value))); 
t.Start(); 
1

你在這種情況下,需要ParameterizedThreadStart

void Main() 
{ 
    Fail fail = new Fail(); 
    int value = 123; 
    Thread t = new Thread(fail.DoWork); // same as: new Thread(new ParameterizedThreadStart(fail.DoWork)); 
    t.Start(value); 
} 

public class Fail 
{ 
    public void DoWork(object value) 
    { 
    Console.WriteLine("value: {0}", value); 
    } 
}