解决方案 »

  1.   

    提示错误 是你的  array   不够长,,也就是n可能是0??
      

  2.   

    你要清楚线程的无序性,你这里 又是add又是remove的,你又不加锁,不能保证有数据让你remove
      

  3.   

    我有给操作加上lock().......额
      

  4.   

    额 声明了一个全局的object st=new object ();然后在while里面 lock(st){........};
      

  5.   

    逻辑写的真混乱
    已经判断了if (GWlist1.Count >= 1)                          
    并且 int n = GWlist1.Count - 1; 
    怎么又判断 if (GWlist8.Count >= n) 
    有什么必要么?
    难道8个list长度还有可能不相等么?
    还有你锁的标识st到底是个什么东西,是全局静态变量么,还是在别的地方有可能会去更改的?
      

  6.   

    额 声明了一个全局的object st=new object ();然后在while里面 lock(st){........};         这个例子是另外一个程序的逻辑的简版......那个程序里面也发现这8个arraylist的长度真的不一致。
      

  7.   

    貌似,说真的,我没看出来,错在哪里。
    所以只有猜测了,你检查下你所有代码,我只能负责的告诉你,你有地方对于arraylist遗漏了锁。
    我只能说,程序,在removerange的时候,有现成对araay进行了增删其中一项操作
      

  8.   

    谢谢回答  但是 有对arraylist的地方只有这两个位置额......LOCK也是覆盖了....
      

  9.   

    缩小数据量慢慢调试吧= =(比如把list改成3个)....
      

  10.   

    如果只有2个地方操作list,而每次都是循环操作8个list,就不可能出现长度不一致的情况.
    所以说代码某些地方对list进行了操作,而且没有加锁.
    右键查找所有引用,看看到底都有哪些地方使用了.另外,如果真的实在找不到原因,也应该是8个list都做个判断,而不是只判断其中2个.
      

  11.   

        我把错误截了个图  可以看到明明arraylist的count里面有足够的值 却报错...
      

  12.   

       另外也可以看到 这几个arraylist的值也不一样了...
      

  13.   

    如果你在调试这个线程的时候,另一个线程并没有停下来,你会发现count值不断的在变大.
    说明不了什么问题.
      

  14.   

    加个try...catch
    建立几个临时变量
    catch的时候给临时变量赋值k,n,count
    在catch里打断点,看当时的值到底是多少.
      

  15.   

    不过即使这样也不能保证抓到当时的值.
    因为catch的过程很消耗时间.
    如果有耐心的话,每个可能出现问题的地方都用if判断,如果else立即将当时的值保留到另一组变量里,然后打断点看.
      

  16.   

    多线程操作一定要Lock
    你可以定义一点局部变量,看你的挺乱的
    index问题debug是最好搞定的,相信你可以的
      

  17.   

    你知道LOCK是意思么?lock st有意义么?
      

  18.   

    线程同步OK http://www.51zxw.net/study.asp?vip=8963801 
    有需要学习的可以进来秒哈