读书人

action.BeginInvoke执行后不是期望的,

发布时间: 2012-06-07 15:05:14 作者: rapoo

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循环早完了

读书人网 >C#

热点推荐