读书人

多线程中修改listview的SubItem,该怎么

发布时间: 2012-01-21 21:31:43 作者: rapoo

多线程中修改listview的SubItem
下面循环是在一个子线程中运行
for (int i = 0; i < ListView1.Items.Count; i++)
{
ListView1.Items[i].SubItems[0].Text= i.ToString();//修改

}
把上面修改的代码放在一委托中也不行,提示:
InvalidArgument=Value of '2' is not valid for 'index'.
Parameter name: index

private delegate void ChangeListViewHandler(int n);
private void ChangeListView(int n)
{
if (ListView1.InvokeRequired)
{

ListView1.Invoke(new ChangeListViewHandler(ChangeListView), new object[] { n});
}
else
{
ListView1.Items[n].SubItems[0].Text = n.ToString();
}
}



[解决办法]
如果是多线程而且下面循环是在一个子线程中运行,我觉得应该
object o=new object();
lock(o){
for (int i = 0; i < ListView1.Items.Count; i++)
{
ListView1.Items[i].SubItems[0].Text= i.ToString();//修改

}
}

[解决办法]
看看你的n是几,感觉是你的索引问题~~~
[解决办法]
从你的代码来看你的那个循环代码没有必要放在线程中吧

读书人网 >C#

热点推荐