本帖最后由 vphoenix 于 2013-12-23 14:28:43 编辑

解决方案 »

  1.   

    这代码执行结果不确定,for循环和thread的执行不互相牵扯,也许i=2了,第一个thread还没执行呢,我机器执行了几次,都是 1,2
      

  2.   

    刚才测试了一下,在for里面sleep一下可以使得输出结果变成1,2。(如何不sleep,输出这个结果呢?)
    还有,Thread在new的时候,不应该是计算出i值了以后,再把具体的值(比如1)传给匿名方法吗?
    现在看上去似乎,匿名方法里持有了i的引用,i变了相应的值也变了。但是int怎么有引用啊……混乱中。
      

  3.   

    thread有一个是可以传参的,用那个就没问题
      

  4.   

    我其实不是非得操作同一个变量。
    我源程序有一个List<String>。我希望,第一个线程把List里面第一个值传给它,第二个线程把List里面第二个值传给它。有什么解决方案?
      

  5.   

     static void Main(string[] args)
            {
                for (int i = 0; i < 2; i++)
                {
                    Thread t = new Thread(
                                        delegate()
                                        {
                                            Console.WriteLine(i);
                                        });
                    t.Start();
                    Thread.Sleep(100);
                }
            }
      

  6.   

    我其实不是非得操作同一个变量。
    我源程序有一个List<String>。我希望,第一个线程把List里面第一个值传给它,第二个线程把List里面第二个值传给它。有什么解决方案?

    这样的话,直接给就行了啊 List<string> list=new List<string>();
     //list.Add("xxx")....
     for (int i = 0; i < list.Count; i++)
                {
                    Thread t = new Thread(
                                        delegate()
                                        {
                                            Console.WriteLine(list[i]);
                                        });
                    t.Start();
                }
      

  7.   

    我其实不是非得操作同一个变量。
    我源程序有一个List<String>。我希望,第一个线程把List里面第一个值传给它,第二个线程把List里面第二个值传给它。有什么解决方案?

    这样的话,直接给就行了啊 List<string> list=new List<string>();
     //list.Add("xxx")....
     for (int i = 0; i < list.Count; i++)
                {
                    Thread t = new Thread(
                                        delegate()
                                        {
                                            Console.WriteLine(list[i]);
                                        });
                    t.Start();
                }

    i会变成2的……然后就数组越界了……
      

  8.   

                for (int i = 0; i < 2; i++)
                {
                    int j = i;
                    Thread t = new Thread(
                                        delegate(obj)
                                        {
                                            Console.WriteLine(obj);
                                        });                                    
                    t.Start(j);
                }
      

  9.   

    在你这个里,i相当于全局变量。for一直在改变他,而Thread启动有不确定延时。
    像你输出两个2,估计是for执行完了,那两个线程才开始执行.