app制作简易网站,建e网3d模型库,河北邢台区号,网站百度v认证回调函数#xff08;Callback Function#xff09;是一种函数指针#xff0c;它指向的是由用户自己定义的回调函数。我们将这个回调函数的指针作为参数传递给另外一个函数#xff0c;在这个函数工作完成后#xff0c;它将通过这个回调函数的指针来回调通知调用者处理结果。…回调函数Callback Function是一种函数指针它指向的是由用户自己定义的回调函数。我们将这个回调函数的指针作为参数传递给另外一个函数在这个函数工作完成后它将通过这个回调函数的指针来回调通知调用者处理结果。 此定义来自网上
看一个例子这是用委托实现的回调函数
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;namespace myhd1
{public partial class Form1 : Form{private delegate void MyDelegate(int a); //定义一个委托类型public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){myFuncWithCallback(15, new MyDelegate(MyCallBack));}private void myFuncWithCallback(int b, MyDelegate callback){int result b * b;callback(result);}private void MyCallBack(int n){textBox1.Text n.ToString();}}
}
private delegate void MyDelegate(int a); 定义一个委托无返回值有一个整型参数
myFuncWithCallback是一个用户定义函数一个带有回调函数的函数
MyCallBack(int n)
{
.......
} 这是回调函数体
new MyDelegate(MyCallBack)这是实例化委托
单击按钮时调用了myFuncWithCallback然后也会执行回调函数
运行如下 假设不用回调函数代码是如下
public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { myFuncWithCallback(15); } private void myFuncWithCallback(int b) { int result b * b; MyCallBack(result); } private void MyCallBack(int n) { textBox1.Text n.ToString(); } } 功能也是一样
但是使用回调函数实现了异步myFuncWithCallback和MyCallBack之间是异步的
异步是什么
异步 不用等所有操作等做完,就可以做其他的处理(比如发消息,发完后,我不需要等你回复,就可以做其他处理)
同步 必须等所有的操作都做完才返回给用户结果 再看一个例子枚举窗口
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Runtime.InteropServices;namespace myhd2
{public partial class Form1 : Form{public delegate void CallBack(int hwnd, int lParam);[DllImport(user32)]public static extern int EnumWindows(CallBack x, int y);public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){CallBack myCallBack new CallBack(Report);EnumWindows(myCallBack, 0); }private void Report(int hwnd, int lParam){textBox1.Text Window handle is hwnd.ToString() Environment.NewLine;} }
}
Win32 api的EnumWindows函数枚举所有屏幕上的顶层窗口并将窗口句柄传送给应用程序定义的回调函数运行如下 枚举和打印输出是异步的