日期:2014-05-18  浏览次数:21097 次

多线程中修改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是几,感觉是你的索引问题~~~
------解决方案--------------------
从你的代码来看你的那个循环代码没有必要放在线程中吧