+ -
当前位置:首页 → 问答吧 → 请问,异步执行的一段代码

请问,异步执行的一段代码

时间:2011-12-17

来源:互联网

class Program
  {
  public delegate void takedelegate(int ms);
  public static void takeMethod(int ms)
  {
  Thread.Sleep(ms);
  }
  static void Main(string[] args)
  {
  takedelegate dl = takeMethod;
  IAsyncResult ar = dl.BeginInvoke(3000, null, null);
  Console.WriteLine("开始执行");
  for (int i = 0; i < 100; i++)
  {
  Console.Write(".");
  Thread.Sleep(50);
  if (ar.IsCompleted) //当异步调用执行完后,退出循环
  {
  Console.WriteLine("执行完毕 ");
  break;
  }
  }
  Console.Read();
  }
  }  

我想问ar.IsCompleted属性,判断异步调用是否完成,BeginInvoke方法开始执行,就立即返回,此时ar.IsCompleted属性值为false,当异步调用执行完后,ar.IsCompleted属性值为true,不过,这个true值,是怎么传进for循环的啊?

作者: drbrdvgrd43   发布时间: 2011-12-17

不是传到for 循环内。你需要先了解引用类型

作者: Sandy945   发布时间: 2011-12-17

引用 25 楼 drbrdvgrd43 的回复:
定义一个变量 int threadId = 0;
然后,在 EndInvoke方法中逛一圈,就得到了异步调用的那个方法的out参数的值
这是不是由 EndInvoke方法的原型决定的,是微软定做的 EndInvoke方法的功能吗?
EndInvoke方法的原型是什么样的?

EndInvoke的原型是变化的,原因之前已经说过了。

当你的方法参数有out 参数时,out 参数的返回值就需要从 EndInvoke 中获取

返回相应的值就是EndInvoke的职责之一

作者: Sandy945   发布时间: 2011-12-18

热门下载

更多