以下代碼無需多線程即可正常工作。但是如果我使用線程,它會失敗。如果我在checkedListBox中選擇多個項目,則第一項將被忽略,其他項將隨機...線程和函數參數
我認爲提交數據存在問題。你怎麼看?
private void sendCom(String com)
{
//send command to selected item
int i=0;
String IP;
foreach (var item in checkedListBox1.CheckedItems)
{
Console.WriteLine(item.ToString());
IP = item.ToString();
theThreads[i] = new Thread(new ThreadStart(() => sendComThread(IP, com)));
theThreads[i].Start();
//sendCom(IP, com);
i++;
}
}
private void sendComThread(String IP, String com)
{
// send an command
System.Console.WriteLine(IP + com);
}
不,看上面,它不起作用。 – tux007
上面看看究竟在哪裏? –
@ tux007這裏的細微差別是'IP'被聲明在循環的範圍內,而不是外部。因此,每次迭代都會創建一個新對象,並傳遞給lambda。當它在循環之外聲明時,每次迭代都會寫入* same *對象,導致遇到的問題。 – Polynomial