问题描述
List<String>list=newList<String>();for(inti=0;i<list.Count;i++){stringv=list[0];list.RemoveAt(0);Threadt1=newThread(newParameterizedThreadStart(work));t1.IsBackground=true;t1.Start(v);}
有一个定时器每隔5分钟执行以上代码。work函数有一个list.add(v);的操作。list里面总共十个元素。程序运行20分钟,有三个元素消失了。是不是work函数的list.add(v);的操作失败了?
解决方案
解决方案二:
更正:有一个定时器每隔5秒钟执行以上代码。
解决方案三:
不会失败
解决方案四:
对于共享变量,做信号了没?
解决方案五:
引用3楼hdt的回复:
对于共享变量,做信号了没?
高手好啊!单纯往List添加元素也要做信号吗?
解决方案六:
list.RemoveAt(0);
解决方案七:
马上加个lock试试
解决方案八:
引用5楼freesarge的回复:
list.RemoveAt(0);
用一个删一个没问题吧?
解决方案九:
引用7楼helpme2004的回复:
引用5楼freesarge的回复:list.RemoveAt(0);用一个删一个没问题吧?
用一个删一个后你的i循环变量也要减1才行
解决方案十:
每删掉一个,list.Count就减一。达不到你的预期效果。
解决方案十一:
每次循环都new一个线程,你到底想干嘛?
解决方案十二:
引用3楼hdt的回复:
对于共享变量,做信号了没?
高手好啊。原来不关list的事。我在线程里面设置三个委托用于更新控件的值,可能过于频繁了,所以控件没反应了。现在只在线程里保留一个委托更新,并且用了信号量,程序终于可以正常运行了。
时间: 2025-01-14 06:48:02