首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

action.BeginInvoke执行后不是期望的,该怎么解决

2012-06-07 
action.BeginInvoke执行后不是期望的C# codepublic class DoActions{public void Doing(int i){Thread.Sle

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

热点排行