什么是较低级别的活动?

时间:2016-03-14 14:47:50

标签: c# windows event-handling

假设有一个简单的窗口,其中包含使用高级语言(如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_样式消息的解码和修改版本吗?

修改 对于这种混乱感到抱歉,我试图将其理解为操作系统级别。

1 个答案:

答案 0 :(得分:2)

这个问题涉及两个部分 - CLR(又名C#)事件与Windows消息的比较,以及Button如何实现CLR事件。

一方面 - 是的,Button的{​​{1}}事件是wrapper over the message loop and WM_ messages

Click

另一方面,CLR事件与消息循环和WM_消息无关 - 它只是因为你在WinForms的上下文中查看它,它选择将WM消息公开为C#事件。

C#事件只不过是一个回调例程 - 你注册一个回调,实现类在发生一些有趣的事情时调用它。