问题描述
大家好,最近在弄线程写了下面的测试程序
Thread[]ts=newThread[8];for(inti=1;i<=8;i++){ts[i-1]=newThread(()=>{BeginDo3(i);});ts[i-1].IsBackground=true;ts[i-1].Start();}stringss=sql;其中sql是一个全局变量这是调用的方法privatestaticvoidBeginDo3(objecti){sql+="参数="+i+"rn";}发现传入的参数有重合比如参数=1参数=2参数=2参数=4参数=5参数=6参数=6参数=8想请教下各位这是怎么一回事
解决方案
解决方案二:
由于匿名委托闭包的问题,在4.0的版本下是在调用的时候才取值,简单来说就是你线程开始运作了才会取i的值。4.5改进了这个地方。在4.0下,建议使用如下方式inttemp=i;循环里用到i的地方都用temp来代替。
时间: 2024-10-27 02:44:08