日期:2014-05-18  浏览次数:21105 次

action.BeginInvoke执行后不是期望的
C# code

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。。。。。

忘前辈指点。

------解决方案--------------------
BeginInvoke是异步执行,当前线程立刻返回。要想达到效果可以试一下action.Invoke()。更好地做法是把循环放到Doing中,action.BeginInvoke异步执行Doing方法,执行结束后回调执行Console.WriteLine("Loop over.")
------解决方案--------------------
BeginInvoke 是异步的,不会在for循环中等待,Thread.Sleep(4000);4秒,for循环早完了