public class DoActions
        {
            public void Doing(int i)
            { 
                Thread.Sleep(4000);
                Console.WriteLine(i.ToString());
            }
        }        static void Main(string[] args)
        {
            for (int i = 0; i < 10; i++)
            {
                //create a Job object
                DoActions objJob = new DoActions();                Action action = new Action(delegate()
                {
                    objJob.Doing(i);
                });
               action.BeginInvoke(null, null);
            }            
            Console.WriteLine("Loop over.");
            Console.ReadKey();            return;
}
输出并不是期望的0,1,2,3
实际上是10,10,10。。忘前辈指点。

解决方案 »

  1.   

    BeginInvoke是异步执行,当前线程立刻返回。要想达到效果可以试一下action.Invoke()。更好地做法是把循环放到Doing中,action.BeginInvoke异步执行Doing方法,执行结束后回调执行Console.WriteLine("Loop over.")
      

  2.   

    BeginInvoke 是异步的,不会在for循环中等待,Thread.Sleep(4000);4秒,for循环早完了
      

  3.   

    public delegate void AsyncHandler(int i);for(...)
    {
      AsyncHandler ah = new AsyncHandler(objJob.Doing);
                    ah.BeginInvoke(i, null, null);
    }解决问题
      

  4.   


    Action<int> action = new Action<int>(delegate(int t)
    {
        objJob.Doing(t);
    });
    action.BeginInvoke(i, null, null);