异步调用与线程(总结篇)
2010-09-30 21:07:06 来源:WEB开发网委托的异步调用通过BeginInvoke和EndInvoke来实现。
从下面的例子中可以看到,异步委托的执行是在新线程中执行,所以当执行委托时,当前工作会不会阻塞,异步委托 与当前线程是同时执行的。
public delegate int AddHandler(int i,int y);
private void button1_Click(object sender, EventArgs e)
{
//添加当前主线程名称“main”
Thread.CurrentThread.Name = "main";
AddHandler handler = new AddHandler(Add);
Debug.WriteLine(handler.BeginInvoke(1, 2, null, null));
Debug.WriteLine("OK");
}
int Add(int x,int y)
{
//输出当前执行操作的现场
Debug.WriteLine(Thread.CurrentThread.Name);
return x + y;
}
输出结果:OK
空
Debug.WriteLine(Thread.CurrentThread.Name) 输出为空,看出异步委托代码执行是在我们没有指定名字的新线程中执行的。
备注:由于异步委托时启用线程池线程执行,.Net没有赋予程序员直接停止其调用的方法,使得我们没有办法直接控制委托的停止和执行,假设 Add是一个0-100循环,一般情况下我们是没有办法在委托循环到50让委托停下来的,二般情况是可以通过一些特殊的手段的需要的话就Goolge一下吧!所以显得委托调用不够灵活
更多精彩
赞助商链接