首页 新闻 会员 周边

c#高手进。。。。

0
[已解决问题] 解决于 2013-01-16 00:03

for (int i = 1; i < 100; i++)
            {
                ThreadPool.QueueUserWorkItem((o) =>
                {
                    int z = i;
                    Thread.Sleep(1000);
                    Console.Write(z.ToString());
                    Console.Write(Environment.NewLine);
                });
            }

为啥输出的都是100呢,,不是用z保存了变量了吗

彬彬@科比的主页 彬彬@科比 | 初学一级 | 园豆:43
提问于:2013-01-12 16:03
< >
分享
最佳答案
0

for (int i = 1; i < 100; i++)
            {
                ThreadPool.QueueUserWorkItem((o) =>
                {
                    int z = (int)o;
                    Thread.Sleep(1000);
                    Console.Write(z.ToString()); 
                    Console.Write(Environment.NewLine); 
                },i);
            }

奖励园豆:5
喵喵喵猫 | 小虾三级 |园豆:1742 | 2013-01-13 22:56
其他回答(3)
0

老兄位置放错啦!~

 看我这个吧:

            for (int i = 1; i < 100; i++)
            {
                ThreadPool.QueueUserWorkItem(start =>
                {
                    int z = i;
                    Console.WriteLine(z.ToString());
                });
                Thread.Sleep(1);//在循环中需要调用一下,由于被置于ThreadPool中的操作是异步,所以还没有来的执行,z就被for循环改变,永远是100
            }
小明冥 | 园豆:222 (菜鸟二级) | 2013-01-12 17:00

z不是值类型嘛?

支持(0) 反对(0) 彬彬@科比 | 园豆:43 (初学一级) | 2013-01-12 21:53

@彬彬@科比: 其实他回答得不是z是否是值类型,而是在第一次执行int z = i;这句的时候,i已经是100了。

支持(0) 反对(0) 滴答的雨 | 园豆:3660 (老鸟四级) | 2013-01-13 01:00

@滴答的雨: for循环不就是添加99个操作到线程池中嘛。。怎么会i已经是100呢!!?

支持(0) 反对(0) 彬彬@科比 | 园豆:43 (初学一级) | 2013-01-13 23:32

@滴答的雨: 这段代码的执行顺序到底是怎样的??线程次里面什么时候才执行

支持(0) 反对(0) 彬彬@科比 | 园豆:43 (初学一级) | 2013-01-13 23:34

还没有来得及执行是什么意思??难道会等for循环执行后才执行???

支持(0) 反对(0) 彬彬@科比 | 园豆:43 (初学一级) | 2013-01-13 23:48
0

你的问题可能也已经解决了,但是这个问题你为什么没排查出来错误?按说应该可以的,你应该没有断点调试吧。有时候断点很方便的

伏草惟存 | 园豆:1420 (小虾三级) | 2013-01-12 19:42
0

i是公共的变量。你所有的100个后台的线程都是有了它,这个情况下你输出的时候,主线程for循环已经走完,此时i是100,你说不是100,难道是1 , 2, 3。。。。。 什么的 

如果要输入1,2,3.....

for (int i = 1; i < 100; i++)
            {

int z = i;
                ThreadPool.QueueUserWorkItem((o) =>
                {
                    Thread.Sleep(1000);
                    Console.Write(z.ToString()); 
                    Console.Write(Environment.NewLine); 
                });
            }

chenping2008 | 园豆:9836 (大侠五级) | 2013-01-13 14:02
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册