我試圖將多個參數傳遞給線程。使用Lambda表達式將參數傳遞給線程
雖然我只用一個參數進行測試,但Lambda表達式並未正確傳遞參數的值。 ParameterizedThreadStart工作正常,但我可以只傳遞一個對象變量而不是更多,這限制了我。
我已經爲每個做了一個示例,並且Lambda Expression方法輸出的輸出不正確。
對於這兩種情況,numOfPortThreads = 2
使用ParameterizedThreadStart
public void InitializePorts(int numOfPortThreads)
{
Thread[] tPortArr = new Thread[numOfPortThreads];
for (int i = 0; i < numOfPortThreads; i++)
{
tPortArr[i] = new Thread(new ParameterizedThreadStart(new PortSim().PortRun));
tPortArr[i].Start(i);
}
}
在 「PortSim.cs」
public void PortRun(object portID)
{
portStopWatch.Start();
Console.WriteLine("This is Port {0}", portID);
Console.ReadKey();
}
在這種情況下的輸出是:
這是端口0
這是端口1
然而,使用Lambda表達式,
public void InitializePorts(int numOfPortThreads)
{
Thread[] tPortArr = new Thread[numOfPortThreads];
for (int i = 0; i < numOfPortThreads; i++)
{
tPortArr[i] = new Thread(() => new PortSim().PortRun(i));
tPortArr[i].Start();
}
}
在 「PortSim.cs」
public void PortRun(int portID)
{
portStopWatch.Start();
Console.WriteLine("This is Port {0}", portID);
Console.ReadKey();
}
的在這種情況下的輸出是:
這是端口2
這是端口2
什麼是錯的第二個例子嗎?爲什麼會產生不正確的結果?
我發現這些線程的回答也是如此。如果可能,請關閉該問題。謝謝! –
已經關閉了問題。您可以隨意使用帖子底部的_「刪除」_鏈接自行刪除它。 –