我同时启动了4个后台线程,每个线程执行结束后就触发OnAddItem将所生成的记录插入listview这样写的
        private void OnAddItem(List<AccountTemp> accounts, Conversion conversion)
        {
            if (lvUndownload.InvokeRequired)
            {
                this.Invoke(new ThreadStart(delegate()
                {
                    this.GenrateListViewData(accounts, conversion);
                }));
            }
            else
            {
                this.GenrateListViewData(accounts, conversion);
            }
        }但是总是在this.invoke这里就抱错。。
InvalidArgument=Value of '0' is not valid for 'index'.是不是多个线程之间互相影响了呢? 请问这个问题怎么解决呢。谢谢
Parameter name: index

解决方案 »

  1.   

    注意使用信号量或者lock()语句
      

  2.   

    你的Invoke傳遞的是ThreadStart?而且啟動線程也不是用Invoke
    開啟線程的方法如下:
    Thread thread=new Thread(new ThreadStart(方法名));
    thread.Start();
      

  3.   

    lock在哪里加呢?我把整个OnAdditem都lock了还是这个错误!
      

  4.   

    OnAdditem得加所,各线程同时插入肯定就报bug,
      

  5.   

    INVOKE是启动指定的线程,委托线程没有参数返回。
      

  6.   

    線程中訪問控件的代碼沒問題,你的GenrateListViewData方法內部出現了問題。把GenrateListViewData的代碼貼出來看下。
      

  7.   

     lvUndownload.BeginUpdate();
                    foreach (AccountTemp account in accounts)
                    {
                        ListViewItem item = new ListViewItem(conversion.Group);
                        item.Text = account.AccountName;
                        item.SubItems.Add(account.UserName);
                        item.SubItems.Add(conversion.Group.Header);
                        lvUndownload.Items.Add(item);
                    }                lvUndownload.EndUpdate();
      

  8.   

    在this.invoke报的错误,accounts有参数不对。。显示下面的信息Count = Function evaluation disabled because a previous function evaluation timed out. You must continue execution to reenable function evaluation.
      

  9.   

    原因找到。。主线程其他地方还有对listview的操作。。但是为什么出现这个错误不太清楚。呵呵~!