当进行耗时的工作时,可以使用异步委托执行。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting.Messaging;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
facHandler f = new facHandler(Fac);
//开异步方法开始执行
IAsyncResult result = f.BeginInvoke(10, new AsyncCallback(callBack), "计算结束");
Console.WriteLine("做其他事情先……");
Console.Read();
}
delegate int facHandler(int n);
static int Fac(int n)
{
if (n == 1) return 1;
System.Threading.Thread.Sleep(100);
return Fac(n - 1) * n;
}
static void callBack(IAsyncResult result)
{
//result是Fac()的返回值
//将AsyncDelegate强制转换为用户定义的委托。
facHandler handler = (facHandler)((AsyncResult)result).AsyncDelegate;
Console.WriteLine("结果:" + handler.EndInvoke(result));
Console.WriteLine(result.AsyncState);
}
}
}
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.Remoting.Messaging;
namespace ConsoleApplication2
{
class Program
{
static void Main(string[] args)
{
facHandler f = new facHandler(Fac);
//开异步方法开始执行
IAsyncResult result = f.BeginInvoke(10, new AsyncCallback(callBack), "计算结束");
Console.WriteLine("做其他事情先……");
Console.Read();
}
delegate int facHandler(int n);
static int Fac(int n)
{
if (n == 1) return 1;
System.Threading.Thread.Sleep(100);
return Fac(n - 1) * n;
}
static void callBack(IAsyncResult result)
{
//result是Fac()的返回值
//将AsyncDelegate强制转换为用户定义的委托。
facHandler handler = (facHandler)((AsyncResult)result).AsyncDelegate;
Console.WriteLine("结果:" + handler.EndInvoke(result));
Console.WriteLine(result.AsyncState);
}
}
}