假设有一个简单的窗口,其中包含使用高级语言(如C#)创建的单个按钮。此按钮具有带有关联处理程序的onClick事件。一旦编译完成后幕后会发生什么?它是否在基本级别上生成一个调用GetMessage函数的Windows消息循环,解码并读取它,然后处理/重新路由它?类似于以下MFC示例?
while( (bRet = GetMessage( &msg, NULL, 0, 0 )) != 0) {
if (bRet == -1) {
// handle the error and possibly exit
}
else {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Windows GUI的所有事件都只是WM_样式消息的解码和修改版本吗?
修改 对于这种混乱感到抱歉,我试图将其理解为操作系统级别。
答案 0 :(得分:2)
这个问题涉及两个部分 - CLR(又名C#)事件与Windows消息的比较,以及Button
如何实现CLR事件。
一方面 - 是的,Button
的{{1}}事件是wrapper over the message loop and WM_
messages:
Click
另一方面,CLR事件与消息循环和WM_消息无关 - 它只是因为你在WinForms的上下文中查看它,它选择将WM消息公开为C#事件。
C#事件只不过是一个回调例程 - 你注册一个回调,实现类在发生一些有趣的事情时调用它。