rt

解决方案 »

  1.   

    .......
    不是……
    是相当于一个CALLBACK+函数指针
      

  2.   

    http://www.yesky.com/497/1640497.shtml
    浅析Visual C#事件处理机制
      

  3.   

    先说下MFC的吧···
    MFC里面 有2中吧1 消息通知
    2 回调函数
    C#里面事件就是回调函数要先声明一个代理(也就是定义一个函数指针说明接受函数的类型,参数列表等等)
    然后根据这个代理 在定义一个事件。但是在.NET里面 一个事件可以对应多个订阅源,就是一个事件调用N个回调函数,这个和MFC里面有很大不同
    可以理解成 一个事件就是一个CALLBACK列表,一旦回调就挨个调用就行了
      

  4.   


    不是吧,MFC不是有一个消息队列,然后有一个循环函数,不断处理队列里的消息...
      

  5.   

    .net中main函数也是开启一个消息循环,这点和mfc没有区别
      

  6.   

    delegate void OnClickD(object Sender,EventAge e);event OnClickD myOnClickHandler;void On_Button1Click(object sender,EventAge e)
    {
      if(myOnClickHandler)//判断有没有订阅的人
        myOnClickHandler(sender,e);
    }
      

  7.   

    WINDFORM是window消息循环线程做的
    你可以是使用SendMessage等API函数
      

  8.   

    不是,MFC是消息循环
    C井是事件驱动,当然了底层还是消息循环
      

  9.   


    你楼上那位已经说得很清楚了
    C#里的事件就是一个函数指针,代码也写的很清楚了if(myOnClickHandler)//判断有没有订阅的人 
        myOnClickHandler(sender,e); 
    判断函数指针是否为空,不为空则调用背后的原理,再底层点到IL就是call xxxx了
      

  10.   

    哦,突然还想到一点
    上面说的是自定义事件但对于button的点击事件,鼠标移动事件之类的,还是用的消息循环
    不过这个只有winform才有你要截获窗体的消息,可以重载WndProc函数
    这样你就能看到熟悉的m.LParam,m.WParam,m.Msg,m.HWnd了
      

  11.   

    请问楼上,你这样说的根据是什么,我觉得C#的事件机制,应该比MFC的消息循环要好???
      

  12.   

    不要拿C++和C#直接比较,尤其是底层实现...C++是本机码,必然和操作系统密切联系,而消息循环实际上是Windows的事件驱动和消息机制的封装...C#则完全不同,它产生的是中间码,.NET的事件模型实际上是一种特殊委托...也就是说它与Windows的事件驱动和消息机制并不发生直接联系,这就是.NET with Mono能在linux上跑的原因,.NET是平台无关的...CLR负责将事件模型翻译给操作系统去处理,至于操作系统是不是消息机制IL并不关心...