C#中的event怎么知道是什么时候调用呢

进击的愤怒 2014-07-14 04:59:20
程序中定义了一些delegates,然后实例化为event 了。是怎么定义什么时候调用这个事件的呢?给实例+=方法以后,程序怎么知道希望什么时候去调用回调方法呢?
...全文
325 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
思路错误, 实例化event者,并不知道,也不关心这个event什么时候会被触发, 他只需要知道,event如果被触发了,他该干什么(绑上哪些委托)
threenewbee 2014-07-14
  • 打赏
  • 举报
回复
人家高兴什么时候调用就什么时候调用。好比你写了个函数给人家用,你关心人家什么情况下调用你么。
欢乐的小猪 2014-07-14
  • 打赏
  • 举报
回复
    class Program
    {
        static void Main(string[] args)
        {
            Observer ob = new Observer(new Publisher());
            Console.ReadKey();
        }
    }

    public class Observer
    {
        private Publisher pub;

        public Observer(Publisher pub)
        {
            this.pub = pub;
            pub.SampleEvent += pub_SampleEvent;
        }

        void pub_SampleEvent(object sender, SampleEventArgs e)
        {
            Console.WriteLine("The latest message is " + e.Message);
        }
    }

    public class Publisher
    {
        private Timer timer;
        public Publisher()
        {
            timer = new Timer((e) => {
                RaiseSampleEvent();
            }, new AutoResetEvent(false),1,1000);
           
        }
        // Declare the delegate (if using non-generic pattern).
        public delegate void SampleEventHandler(object sender, SampleEventArgs e);

        // Declare the event.
        public event SampleEventHandler SampleEvent;

        // Wrap the event in a protected virtual method
        // to enable derived classes to raise the event.
        protected virtual void RaiseSampleEvent()
        {
            // Raise the event by using the () operator.
            if (SampleEvent != null)
                SampleEvent(this, new SampleEventArgs(DateTime.Now.ToString()));
        }
    }

    public class SampleEventArgs : EventArgs
    {
        public string Message;
        public SampleEventArgs(string message)
        {
            Message = message;
        }
    }
霖雨 2014-07-14
  • 打赏
  • 举报
回复
你绑定的事件是什么,就通过那个事件触发,比如btn.click+=,就是单击button时触发
md5e 2014-07-14
  • 打赏
  • 举报
回复
你可以这么定义 private object _handlerKey = new object(); /// <summary> /// 选中项改变事件(需要启用AutoPostBack) /// </summary> public event EventHandler SelectedIndexChanged { add { Events.AddHandler(_handlerKey, value); } remove { Events.RemoveHandler(_handlerKey, value); } } protected virtual void OnSelectedIndexChanged(EventArgs e) { EventHandler handler = Events[_handlerKey] as EventHandler; if (handler != null) { handler(this, e); } } //在需要触发的代码段里去执行 OnSelectedIndexChanged(EventArgs.Empty);//触发SelectedIndexChanged
於黾 2014-07-14
  • 打赏
  • 举报
回复
所谓事件,不就是某些属性改变的时候触发一个方法么 而属性,就是get;set;不仅仅是个Public变量,里面是带方法的
md5e 2014-07-14
  • 打赏
  • 举报
回复
当然是由执行到某个方法时去触发了

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧