C#中多线程Arraylist的操作出错问题 arraylist多线程c# 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 提示错误 是你的 array 不够长,,也就是n可能是0?? 你要清楚线程的无序性,你这里 又是add又是remove的,你又不加锁,不能保证有数据让你remove 我有给操作加上lock().......额 额 声明了一个全局的object st=new object ();然后在while里面 lock(st){........}; 逻辑写的真混乱已经判断了if (GWlist1.Count >= 1) 并且 int n = GWlist1.Count - 1; 怎么又判断 if (GWlist8.Count >= n) 有什么必要么?难道8个list长度还有可能不相等么?还有你锁的标识st到底是个什么东西,是全局静态变量么,还是在别的地方有可能会去更改的? 额 声明了一个全局的object st=new object ();然后在while里面 lock(st){........}; 这个例子是另外一个程序的逻辑的简版......那个程序里面也发现这8个arraylist的长度真的不一致。 貌似,说真的,我没看出来,错在哪里。所以只有猜测了,你检查下你所有代码,我只能负责的告诉你,你有地方对于arraylist遗漏了锁。我只能说,程序,在removerange的时候,有现成对araay进行了增删其中一项操作 谢谢回答 但是 有对arraylist的地方只有这两个位置额......LOCK也是覆盖了.... 缩小数据量慢慢调试吧= =(比如把list改成3个).... 如果只有2个地方操作list,而每次都是循环操作8个list,就不可能出现长度不一致的情况.所以说代码某些地方对list进行了操作,而且没有加锁.右键查找所有引用,看看到底都有哪些地方使用了.另外,如果真的实在找不到原因,也应该是8个list都做个判断,而不是只判断其中2个. 我把错误截了个图 可以看到明明arraylist的count里面有足够的值 却报错... 另外也可以看到 这几个arraylist的值也不一样了... 如果你在调试这个线程的时候,另一个线程并没有停下来,你会发现count值不断的在变大.说明不了什么问题. 加个try...catch建立几个临时变量catch的时候给临时变量赋值k,n,count在catch里打断点,看当时的值到底是多少. 不过即使这样也不能保证抓到当时的值.因为catch的过程很消耗时间.如果有耐心的话,每个可能出现问题的地方都用if判断,如果else立即将当时的值保留到另一组变量里,然后打断点看. 多线程操作一定要Lock你可以定义一点局部变量,看你的挺乱的index问题debug是最好搞定的,相信你可以的 你知道LOCK是意思么?lock st有意义么? 线程同步OK http://www.51zxw.net/study.asp?vip=8963801 有需要学习的可以进来秒哈 datagridView排序问题 udp发送问题 再问一个很弱的问题 请教如何生成图片 DataGirdView.DataSource的问题 C# 文件编译后的dll 如何反编译?查看到源代码 .net中的WINDOWS用户控件和装配件的动态加载 求助,VS高手!我的VS用不得! 跪求兄弟们、大侠:在DataGridVIew中的RowPrePaint事件中,对数据按不条件着色后,发现不断循环执行,造成程序假死或真死退出。 菜鸟问题:什么叫分布式?? Datagridview与ListView的问题、希望解决 求助 :将一个java类转为C# 类
已经判断了if (GWlist1.Count >= 1)
并且 int n = GWlist1.Count - 1;
怎么又判断 if (GWlist8.Count >= n)
有什么必要么?
难道8个list长度还有可能不相等么?
还有你锁的标识st到底是个什么东西,是全局静态变量么,还是在别的地方有可能会去更改的?
所以只有猜测了,你检查下你所有代码,我只能负责的告诉你,你有地方对于arraylist遗漏了锁。
我只能说,程序,在removerange的时候,有现成对araay进行了增删其中一项操作
所以说代码某些地方对list进行了操作,而且没有加锁.
右键查找所有引用,看看到底都有哪些地方使用了.另外,如果真的实在找不到原因,也应该是8个list都做个判断,而不是只判断其中2个.
说明不了什么问题.
建立几个临时变量
catch的时候给临时变量赋值k,n,count
在catch里打断点,看当时的值到底是多少.
因为catch的过程很消耗时间.
如果有耐心的话,每个可能出现问题的地方都用if判断,如果else立即将当时的值保留到另一组变量里,然后打断点看.
你可以定义一点局部变量,看你的挺乱的
index问题debug是最好搞定的,相信你可以的
有需要学习的可以进来秒哈