是否可以在threadstart內傳遞一個參數來開始執行方法?在線程啓動內部傳遞參數
int value = 123;
Thread t = new Thread(new ThreadStart(fail.DoWork(value)));
Class fail
{
public void DoWork(int Value)
}
我還可以在DoWork中傳遞這個參數嗎?
是否可以在threadstart內傳遞一個參數來開始執行方法?在線程啓動內部傳遞參數
int value = 123;
Thread t = new Thread(new ThreadStart(fail.DoWork(value)));
Class fail
{
public void DoWork(int Value)
}
我還可以在DoWork中傳遞這個參數嗎?
您可以嘗試
int value = 123;
fail objfail = new fail();
var t = new Thread(() => objfail.DoWork(value));
t.Start();
我相信你也可以做拉姆達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表達式的唯一真正區別在於,您不必使用參數明確寫入包裝函數。
我更喜歡這樣的語法:
int value = 123;
var t = new Thread((ThreadStart)(() => fail.DoWork(value)));
t.Start();
你在這種情況下,需要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);
}
}
拋出錯誤「無過載爲 'DoWork的' 匹配委託 'system.threading.parameterizedthreadstart' – user759913
編輯我的回答,請立即嘗試 – pravprab