请问C#的事件处理机制/原理,是不是类似于MFC的消息循环? rt 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 .......不是……是相当于一个CALLBACK+函数指针 http://www.yesky.com/497/1640497.shtml浅析Visual C#事件处理机制 先说下MFC的吧···MFC里面 有2中吧1 消息通知2 回调函数C#里面事件就是回调函数要先声明一个代理(也就是定义一个函数指针说明接受函数的类型,参数列表等等)然后根据这个代理 在定义一个事件。但是在.NET里面 一个事件可以对应多个订阅源,就是一个事件调用N个回调函数,这个和MFC里面有很大不同可以理解成 一个事件就是一个CALLBACK列表,一旦回调就挨个调用就行了 不是吧,MFC不是有一个消息队列,然后有一个循环函数,不断处理队列里的消息... .net中main函数也是开启一个消息循环,这点和mfc没有区别 delegate void OnClickD(object Sender,EventAge e);event OnClickD myOnClickHandler;void On_Button1Click(object sender,EventAge e){ if(myOnClickHandler)//判断有没有订阅的人 myOnClickHandler(sender,e);} WINDFORM是window消息循环线程做的你可以是使用SendMessage等API函数 不是,MFC是消息循环C井是事件驱动,当然了底层还是消息循环 你楼上那位已经说得很清楚了C#里的事件就是一个函数指针,代码也写的很清楚了if(myOnClickHandler)//判断有没有订阅的人 myOnClickHandler(sender,e); 判断函数指针是否为空,不为空则调用背后的原理,再底层点到IL就是call xxxx了 哦,突然还想到一点上面说的是自定义事件但对于button的点击事件,鼠标移动事件之类的,还是用的消息循环不过这个只有winform才有你要截获窗体的消息,可以重载WndProc函数这样你就能看到熟悉的m.LParam,m.WParam,m.Msg,m.HWnd了 请问楼上,你这样说的根据是什么,我觉得C#的事件机制,应该比MFC的消息循环要好??? 不要拿C++和C#直接比较,尤其是底层实现...C++是本机码,必然和操作系统密切联系,而消息循环实际上是Windows的事件驱动和消息机制的封装...C#则完全不同,它产生的是中间码,.NET的事件模型实际上是一种特殊委托...也就是说它与Windows的事件驱动和消息机制并不发生直接联系,这就是.NET with Mono能在linux上跑的原因,.NET是平台无关的...CLR负责将事件模型翻译给操作系统去处理,至于操作系统是不是消息机制IL并不关心... pictureBox1.Image = Image.FromFile("F:\\fc三胞胎.jpg",true)为什么老是提示错误,路径没错呀!问题到底出在哪儿 求教关于pictureBox中的Image的一些问题! 关于获取焦点和ENTER事件的问题,在线等! 判断线程状态问题 帮忙看看这编码 如何学好c#啊? 请教大家一个C#问题,多多指教! 一个关于用户控件的问题!谢谢各位了 哪里有人气较旺的讨论软件复用的论坛啊,100全送,不够的话再给,急。 C#里有关数据记录的保存问题 由于缺少调试目标,无法开始调试 帮我看看这段代码的问题。
不是……
是相当于一个CALLBACK+函数指针
浅析Visual C#事件处理机制
MFC里面 有2中吧1 消息通知
2 回调函数
C#里面事件就是回调函数要先声明一个代理(也就是定义一个函数指针说明接受函数的类型,参数列表等等)
然后根据这个代理 在定义一个事件。但是在.NET里面 一个事件可以对应多个订阅源,就是一个事件调用N个回调函数,这个和MFC里面有很大不同
可以理解成 一个事件就是一个CALLBACK列表,一旦回调就挨个调用就行了
不是吧,MFC不是有一个消息队列,然后有一个循环函数,不断处理队列里的消息...
{
if(myOnClickHandler)//判断有没有订阅的人
myOnClickHandler(sender,e);
}
你可以是使用SendMessage等API函数
C井是事件驱动,当然了底层还是消息循环
你楼上那位已经说得很清楚了
C#里的事件就是一个函数指针,代码也写的很清楚了if(myOnClickHandler)//判断有没有订阅的人
myOnClickHandler(sender,e);
判断函数指针是否为空,不为空则调用背后的原理,再底层点到IL就是call xxxx了
上面说的是自定义事件但对于button的点击事件,鼠标移动事件之类的,还是用的消息循环
不过这个只有winform才有你要截获窗体的消息,可以重载WndProc函数
这样你就能看到熟悉的m.LParam,m.WParam,m.Msg,m.HWnd了