在datagridview中,我有一个IP地址字段。 当我点击检查状态按钮时,我为datagridview中的每一行创建线程,然后在该IP上的主机上调用远程对象并获取一些信息,并将另一个datagridview字段设置为该信息。
但是有问题。在datagridview上错误地设置了信息。为什么呢?
private void button_CheckStatus_Click(object sender, EventArgs e)
{
for (int i = 0; i < dataGridView.Rows.Count; i++)
{
IPAddress IP;
if (IsValidIP(dataGridView["IP", i].Value.ToString(), out IP))
{
Thread t = new Thread(() => CheckStatusThreadFunction(IP, i));
t.Start();
}
}
}
答案 0 :(得分:2)
确保不捕获循环变量:
for (int i = 0; i < dataGridView_VSD.Rows.Count; i++)
{
int ii = i;
IPAddress IP;
if (IsValidIP(dataGridView_VSD["VSD_IP", i].Value.ToString(), out IP))
{
Thread t = new Thread(() => CheckVSDStatusThreadFunction(IP, ii));
t.Start();
}
}
这是一个非常常见的错误。
参见例如here