什么是C#回调函数?
成都创新互联公司专注于濂溪企业网站建设,成都响应式网站建设,商城网站定制开发。濂溪网站建设公司,为濂溪等地区提供建站服务。全流程按需定制开发,专业设计,全程项目跟踪,成都创新互联公司专业和态度为您提供的服务
C#回调函数是应用程序提供给Windows系统DLL或其它DLL调用的函数,一般用于截获消息、获取系统信息或处理异步事件。应用程序把回调函数的地址指针告诉DLL,而DLL在适当的时候会调用该函数。回调函数必须遵守事先规定好的参数格式和传递方式,否则DLL一调用它就会引起程序或系统的崩溃。通常情况下,回调函数采用标准WindowsAPI的调用方式,即__stdcall,当然,DLL编制者可以自己定义调用方式,但客户程序也必须遵守相同的规定。在__stdcall方式下,函数的参数按从右到左的顺序压入堆栈,除了明确指明是指针或引用外,参数都按值传递,函数返回之前自己负责把参数从堆栈中弹出。
理解C#回调函数!
程序在调用一个函数(function)时(通常指api).相当于程序(program)呼叫(Call)了一个函数(function)关系表示如下:
call(调用)
program--------------------→dll
程序在调用一个函数时,将自己的函数的地址作为参数传递给程序调用的函数时(那么这个自己的函数称回调函数).需要回调函数的DLL函数往往是一些必须重复执行某些操作的函数.关系表示如下:
call(调用)
program--------------------→dll
↑¦
¦_______________________________¦
callback(回调)
当你调用的函数在传递返回值给回调函数时,你就可以利用回调函数来处理或完成一定的操作。至于如何定义自己的回调函数,跟具体使用的API函数有关,很多不同类别的回调函数有各种各样的参数,有关这些参数的描述一般在帮助中有说明回调函数的参数和返回值等.其实简单说回调函数就是你所写的函数满足一定条件后,被DLL调用!
也有这样的说法(比较容易理解):
回调函数就好像是一个中断处理函数,系统在符合你设定的条件时自动调用。为此,你需要做三件事:
1.声明;
2.定义;
3.设置触发条件,就是在你的函数中把你的回调函数名称转化为地址作为一个参数,以便于DLL调用。
下面是示例代码:
- WorkClass.cs:
- usingSystem;
- namespaceCallBackSample
- ...{
- publicdelegatestringShowMessage(stringmessage);
- internalclassWorkClass
- ...{
- publicvoidDoWork(stringmessage)
- ...{
- ShowMessageshowMessage=newShowMessage(showCoolMessage);
- showMessage+=showTerribleMessage;
- stringresult="";
- foreach(ShowMessageshinshowMessage.GetInvocationList())
- ...{
- result+=sh(message);
- }
- Console.Write(result);
- Console.Read();
- }
- privatestringshowCoolMessage(stringmessage)
- ...{
- strings=message+"Cool!";
- returns;
- }
- privatestringshowTerribleMessage(stringmessage)
- ...{
- strings=message+"Terrible!";
- returns;
- }
- }
- }
- program.cs:
- namespaceCallBackSample
- ...{
- classProgram
- ...{
- staticvoidMain(string[]args)
- ...{
- WorkClassworkClass=newWorkClass();
- workClass.DoWork("Basketball");
- }
- }
- }
【编辑推荐】
当前标题:讲解如何实现C#回调函数
网页地址:http://www.gawzjz.com/qtweb2/news40/18540.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联