none
关于EventArgs.Empty的问题 RRS feed

  • 问题

  • 具体是一小段程序码,我先贴上来,如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;

    namespace Simulation
    {
        delegate void MyEventHandler(object sender, EventArgs e);
        class EvenClass
        {
            public event MyEventHandler MyEvent;
            protected void OnMyEvent(EventArgs e)
            {
                Console.WriteLine("EventClass: Ready to fire a MyEvent!");
                if (this.MyEvent != null)
                {
                    Console.WriteLine("EvenClass: Fire a MyEvent!");
                    this.MyEvent(this, e);
                }
            }
            public void FireAEvent()
            {
                this.OnMyEvent(EventArgs.Empty);//存疑惑。 在第一次程序调用该方法时,会接着调用OnMyEvent()方法。但在this.MyEvent(this,e);语句执行完,顺序走下来接着执行FireAEvent()方法时,里面的OnMyEvent(EventArgs.Empty);方法不再调用OnMyEvent()方法了。为什么?
            }
            static void GetAEvent(object sender, EventArgs e)
            {
                Console.WriteLine("GetAEvent: Get a event EventClass!");
            }
            static void Main(string[] args)
            {
                EvenClass ect = new EvenClass();
                ect.MyEvent += new MyEventHandler(GetAEvent);
                ect.FireAEvent();
                ect.MyEvent -= new MyEventHandler(GetAEvent);
                ect.FireAEvent();
            }
        }
    }


    Nothing will be more fulfilling than having a stable relationship
    2010年6月16日 2:30

答案

  • 你再次执行时,你的MyEvent 事件已经和GetAEvent取消了委托绑定,


    努力+方法=成功
    • 已建议为答案 mazhou 2010年6月18日 6:56
    • 已标记为答案 KeFang Chen 2010年6月22日 6:36
    2010年6月17日 2:56
  • 你好,

    我的理解是:你在调试的时候如果在FireAEvent方法中设置断点,那第一次执行到this.OnMyEvent(EventArgs.Empty);后会马上去触发事件,事件执行完后再返回这个方法那。

    也就是说第一次是进入,第二次是退出。


    Microsoft Online Community Support
    • 已建议为答案 mazhou 2010年6月18日 6:56
    • 已标记为答案 KeFang Chen 2010年6月22日 6:36
    2010年6月18日 2:11

全部回复

  • 你再次执行时,你的MyEvent 事件已经和GetAEvent取消了委托绑定,


    努力+方法=成功
    • 已建议为答案 mazhou 2010年6月18日 6:56
    • 已标记为答案 KeFang Chen 2010年6月22日 6:36
    2010年6月17日 2:56
  • 你好,

    我的理解是:你在调试的时候如果在FireAEvent方法中设置断点,那第一次执行到this.OnMyEvent(EventArgs.Empty);后会马上去触发事件,事件执行完后再返回这个方法那。

    也就是说第一次是进入,第二次是退出。


    Microsoft Online Community Support
    • 已建议为答案 mazhou 2010年6月18日 6:56
    • 已标记为答案 KeFang Chen 2010年6月22日 6:36
    2010年6月18日 2:11