定义一个委托,异步调用线程
static int TakesAWhile(int data,int ms)
{
Console.WriteLine("TakesAWhile started");
Thread.sleep(ms);
Console.WriteLine("TakesAWhile completed");
return ++data;
}
public delegate int TakesAWhileDelegate(int data,int ms);
异步调用委托,返回结果。
检查委托是否完成了任务
(1)运用Delegate类中的 BeginInvoke()和EndInvoke()方法
BeginInvoke:返回类型LAsyncResult,可以获得委托的信息,并验证委托是否完成了任务
EndInvoke:方法会一直等待,直到委托完成其任务返回完成信息
static void Main()
{
TakesAWhileDelegate dl=TakesAWhile;
IAsyncResult ar = dl.BeginInvoke(1,3000,null,null);
while(!ar.Iscompleted)
{
Console.Write(".");
Thread.sleep(50);
}
int result = dl.EndInvoke(ar);
Console.WriteLine("result:{0}",result);
}
(2)运用等待句柄检查委托是否完成了任务
使用AsyncWaitHandle属性访问等待句柄,这个属性返回一个WaitHandle类型的对象。
static viod Main()
{
TakesAWhileDelegate dl=TakesAWhile;
IAsyncResult ar = dl.BeginInvoke(1,3000,null,null);
while(true)
{
Console.Write(".");
//IAsyncResult相关的WaitOne()将一个超时时间作为可选的一个参数,在其中可以定义要等待的最大时间
if(ar.AsyncWaitHandle.WaitOne(50,false))
{
Console.WriteLine("Can get the result now");
break;
}
}
int result = dl.EndInvoke(ar);
Console.WriteLine("result:{0}",result);
}