当前位置:编程学习 > C#/ASP.NET >>

C#的事件驱动机制是什么,如何重写事件委托?

C#的事件驱动机制是什么,如何重写事件委托?事件是在哪个地方触发的?如何给控件添加本来没有的事件委托? .net c# 事件 --------------------编程问答-------------------- 捕获控件的消息,然后做相应的处理,只是理论上的,我没做过。 --------------------编程问答-------------------- 下面一个例子:

protected override void lblTitle_Click(object sender, EventArgs e)
        {
            //调用触发事件的函数
            this.OnTitleColumnSelectEvent(this);
        }

        /// <summary>
        /// 当前控件选中事件,用于重置其余同类控件的事件
        /// </summary>
        public event ResetOtherTypeTitleControlNormal TitleColumnSelectEvent;
        /// <summary>
        /// 触发控件选中事件函数
        /// </summary>
        /// <param name="titleColumnCtl">选中的控件</param>
        private void OnTitleColumnSelectEvent(TyteTitleColumnControl titleColumnCtl)
        {
            if (this.TitleColumnSelectEvent != null)
            {
                this.TitleColumnSelectEvent(titleColumnCtl);
            }
        }
    }

    public delegate void ResetOtherTypeTitleControlNormal(TyteTitleColumnControl titleColumnCtl); --------------------编程问答-------------------- C#事件驱动机制,我的理解是利用委托和事件订阅者和事件触发者之间实现,一旦某事件被触发,所有订阅者都会收到消息,并作出相应的处理,个人觉得和观察者模式很想。自己定义一个事件,首先定义一个委托,其次将创建的委托和特定事件关联(比如点击事件等),然后编写事件处理处理程序,然后生成一个委托实例,最后把委托实例添加到产生事件的事件列表中去,即订阅事件。 --------------------编程问答--------------------
引用 3 楼 qiqingli 的回复:
C#事件驱动机制,我的理解是利用委托和事件订阅者和事件触发者之间实现,一旦某事件被触发,所有订阅者都会收到消息,并作出相应的处理,个人觉得和观察者模式很想。自己定义一个事件,首先定义一个委托,其次将创建的委托和特定事件关联(比如点击事件等),然后编写事件处理处理程序,然后生成一个委托实例,最后把委托实例添加到产生事件的事件列表中去,即订阅事件。

恩,大致的过程是这样的,我现在就是不太明白事件触发那个部分的内容,为了判断触发的条件有没有满足,我可以用一个while循环,一直判断,但是这样效率很低,或者将触发函数放到一个线程中区,但是这样还是不太好,不知道windows有没有其他的更好的处理机制,Button对象的click事件到底是使用什么形式触发 --------------------编程问答--------------------
引用 4 楼 sun350771521 的回复:
引用 3 楼 qiqingli 的回复:C#事件驱动机制,我的理解是利用委托和事件订阅者和事件触发者之间实现,一旦某事件被触发,所有订阅者都会收到消息,并作出相应的处理,个人觉得和观察者模式很想。自己定义一个事件,首先定义一个委托,其次将创建的委托和特定事件关联(比如点击事件等),然后编写事件处理处理程序,然后生成一个委托实例,最后把委托实例添加到产生事件的事件列表中去,……
这个,你可以写一个建的WindowsForm项目,填个按钮,双击加个click事件,可以看自动生成的代码和设计代码,估计就明白了。。。虽然,我看了好几遍,因为项目中不常写,也不能确定。。。 --------------------编程问答--------------------

        static void Main()
        {
            ABC abc = new ABC();
            abc.Light += LightLine1;//接灯1线
            abc.Light += LightLine2;//接灯2线

            abc.OnLoght();//按一下开关
        }
        static void LightLine1()
        {
            Console.WriteLine("灯1亮了");
        }
        static void LightLine2()
        {
            Console.WriteLine("灯2也亮了");
        }
        public class ABC
        {
            public delegate void OnLightEventHandler();

            public event OnLightEventHandler Light;//相当于接线
            public void OnLoght()//相当于开关
            {
                if (Light != null)
                {
                    Light();
                }
            }
        }
--------------------编程问答-------------------- 事件的本质还是一个委托,建议去看下观察者模式,这个模式里面的例子对事件委托理解有很大帮助 --------------------编程问答--------------------
引用 7 楼 xiaogui340 的回复:
事件的本质还是一个委托,建议去看下观察者模式,这个模式里面的例子对事件委托理解有很大帮助

这个我是知道的,但是windows事件驱动过程中会用到消息,我想知道windows对委托调用是如何通过消息传递给事件处理函数的 --------------------编程问答--------------------
引用 6 楼 softcreator 的回复:
C# code?1234567891011121314151617181920212223242526272829        static void Main()        {            ABC abc = new ABC();            abc.Light += LightLine1;//接灯1线            abc.Light……

委托以及事件的定义和使用,我都会的,但当我在使用控件的时候,他的事件触发会使用到消息机制,就是不明白这里面的关系 --------------------编程问答--------------------
引用 8 楼 sun350771521 的回复:
引用 7 楼 xiaogui340 的回复:事件的本质还是一个委托,建议去看下观察者模式,这个模式里面的例子对事件委托理解有很大帮助
这个我是知道的,但是windows事件驱动过程中会用到消息,我想知道windows对委托调用是如何通过消息传递给事件处理函数的

http://lidongdong8841305.blog.163.com/blog/static/42938374201085113836275/

我觉得略有钻牛角尖了 --------------------编程问答--------------------
引用 10 楼 xiaogui340 的回复:
引用 8 楼 sun350771521 的回复:引用 7 楼 xiaogui340 的回复:事件的本质还是一个委托,建议去看下观察者模式,这个模式里面的例子对事件委托理解有很大帮助
这个我是知道的,但是windows事件驱动过程中会用到消息,我想知道windows对委托调用是如何通过消息传递给事件处理函数的
http://lidongdong8841305.blog.……

是有点,但是我现在确实是要用到这方面的知识,没办法,网上说的都是一些很浅显的东西,智能在csdn上问问了
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,