C# 中的委托(Delegate)类似于 C 或 C++ 中函数的指针。委托(Delegate)是存有对某个方法的引用的一种引用类型变量。引用可在运行时被改变。
委托(Delegate)特别用于实现事件和回调方法。所有的委托(Delegate)都派生自 System.Delegate 类。
异步委托示例:
1、某控件value值变更时调用代码
private void RadioButton_CheckedChanged(object sender, EventArgs e)
{
RadioButtonEx rd = sender as RadioButtonEx;
dicParmDetail[rd.id].newvalue = Convert.ToInt32(rd.Checked);
RunTaskDelegate handler = new RunTaskDelegate(ctrl2canSend);//执行can请求
IAsyncResult result = handler.BeginInvoke(callBack, “sendDefaultDataAsycState:OK”);
}
2、回调实现
private void callBack(IAsyncResult result)
{
//AsyncResult 是IAsyncResult接口的一个实现类,空间:System.Runtime.Remoting.Messaging
//AsyncDelegate 属性可以强制转换为用户定义的委托的实际类。
RunTaskDelegate handler = (RunTaskDelegate)((AsyncResult)result).AsyncDelegate;
handler.EndInvoke(result);
}
}
3、委托注册函数实现
private void ctrl2canSend()
{
foreach(int key in dicParmDetail.Keys)
{
// …
}
}