可以这样理解: 委托是一个函数的指针,但它可以被异步地去调用。 当我们声明一个委托的时候,例如: public delegate bool FactorizingAsyncDelegate( int factorizableNum, ref int primefactor1, ref int primefactor2);系统是这样解释的:public class FactorizingAsyncDelegate : delegate { public bool Invoke( int factorizableNum, ref int primefactor1, ref int primefactor2); // The following code was supplied by the compiler. public IAsyncResult BeginInvoke( int factorizableNum, ref int primefactor1, ref int primefactor2, AsyncCallback cb, Object AsyncState ); // The following code was supplied by the compiler. public bool EndInvoke( ref int primefactor1, ref int primefactor2, IAsyncResult ar); }可以理解为这段代码是系统自己生成的这里的Invoke方法是同步调用,也就是我们一般用的Event和在声明类里对委托的直接调用。 但它的BeginInvoke和EndInvoke却是异步的。即当我们使用委托的异步的BeginInvoke和EndInvoke时,本线程是post一个Message出去的,这个Message会启动一个新的线程去执行委托对应的函数(方法)。
http://blog.csdn.net/clamphammer/archive/2004/11/21/189804.aspx
另外还有微软的MSDN,更详细
委托是一个函数的指针,但它可以被异步地去调用。
当我们声明一个委托的时候,例如:
public delegate bool FactorizingAsyncDelegate(
int factorizableNum,
ref int primefactor1,
ref int primefactor2);系统是这样解释的:public class FactorizingAsyncDelegate : delegate
{
public bool Invoke(
int factorizableNum,
ref int primefactor1,
ref int primefactor2); // The following code was supplied by the compiler.
public IAsyncResult BeginInvoke(
int factorizableNum,
ref int primefactor1,
ref int primefactor2,
AsyncCallback cb,
Object AsyncState
); // The following code was supplied by the compiler.
public bool EndInvoke(
ref int primefactor1,
ref int primefactor2,
IAsyncResult ar);
}可以理解为这段代码是系统自己生成的这里的Invoke方法是同步调用,也就是我们一般用的Event和在声明类里对委托的直接调用。
但它的BeginInvoke和EndInvoke却是异步的。即当我们使用委托的异步的BeginInvoke和EndInvoke时,本线程是post一个Message出去的,这个Message会启动一个新的线程去执行委托对应的函数(方法)。
而代理(delegate)好比是把每盏灯的开关都接到一个控制面板上。你要控制哪盏灯,只需要控制面板就可以了。